home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 1
/
SPACE - Library 1 - Volume 1.iso
/
telecomm
/
517
/
omnibus2
/
source.lst
< prev
Wrap
File List
|
1991-05-30
|
119KB
|
3,749 lines
' OMNIBUS2 English version
' LET version$="V.2.4v "+CHR$(225)+"-Test" ! Versions-Nummer
' ACTUAL (Datensatz binaer; Ed_alloc% (Malloc f. Editor) eingebaut)
' struct (Modemabfrage numerisch; Hauptschleife abgetrennt; ANSI ansehen)
' VT100 (Gag, Bildschirmwechsel eingebaut)
' (Log-on-Warnung, Caption auf STBY bei ANSI ansehen)
' (Alle Bildschirmausgaben mit Bios)
' (Sequenzer voll numerisch, voll Bios, optimiert)
' (Rechner-Erkennung; selbstinstallierend)
' (Bildschirm-Retter von 32000 eingerichtet)
' (Datei anschauen via Bload in Bildschirm-Retter)
' omnibus2 Data Terminal V 1.0 Beta-Test
' Paul Batt, Kernstrasse 27, 8004 Zurich, Switzerland
'
' ----------------------------- Voreinstellungen ------------------------------
'
phystop%=LPEEK(&H42E)/1024/1024
PRINT
PRINT
PRINT " Beta test System"
PRINT " ----------------"
PRINT
PRINT
PRINT " ";phystop%;"-MEGA-RAM-Computer"
start_sysfre%=GEMDOS(&H48,L:-1)
PRINT ! .
PRINT " Free RAM: ";start_sysfre%
PRINT " Not used: ";FRE(0)
PRINT
PRINT " Make use of not used RAM:"
PRINT
'
shrink%=FRE(0)-48*1024 !
RESERVE FRE(0)-shrink%
PRINT " Not used: ";FRE(0)
new_sysfre%=GEMDOS(&H48,L:-1)
dat%=GEMDOS(&H48,L:2048)
'
@dimens
@get_std_var
@read_dat
m_edal%=ed_alloc%*100
'
PRINT " Free System RAM: ";new_sysfre%
PRINT
PRINT " For editor: ";m_edal%
'
cpt_alloc%=new_sysfre%-32512-2048-512-512-8-8-m_edal%
capt%=GEMDOS(&H48,L:cpt_alloc%)
puff%=GEMDOS(&H48,L:512)
log%=GEMDOS(&H48,L:512)
mod%=GEMDOS(&H48,L:8)
seq%=GEMDOS(&H48,L:8)
'
scrn%=GEMDOS(&H48,L:32512) ! Geschuetzter Speicher fuer Screen
log_scrn%=INT(scrn%/256)*256 ! Adresse des logischen Screens
phs_scrn%=XBIOS(2) ! Adresse des physikalischen Screens
'
ON ERROR GOSUB fehler ! EOF-Fehlermeldung ignorieren
'
' +-------------------------------------+
SPOKE &H484,PEEK(&H484) OR 8 ! kbshift-Meldung ein; zum Erkennen |
' ! der Sontertasten Alt, Ctr, Shift |
' ! etc. Der Befehl setzt im Supervisor-|
' ! Modus (Zugriff auf Betriebs-System- |
' ! Routinen, eigentlich verboten!) an |
' ! der Speicheradresse $484 das dritte |
' ! Bit. TOS meldet dann beim Aufruf der|
' ! GemDOS Nr. 7 ("Direct Con in without|
' ! Echo")-Funktion das sogenannte |
' ! Shift-Byte, das das Erkennen von |
' ! Tasten-Kombinationen erlaubt. Die |
' ! Speicherstelle $484 befindet sich |
' ! in allen TOS-Versionen, auch in den |
' ! zukuenftigen an der gleichen Stelle.|
' ! Das Shift-Byte wird in der Prozedur |
' ! Terminal zweiter Teil benutzt. |
' +-------------------------------------+
LET version$="V.2.4v "+CHR$(225)+"-Test" ! Versions-Nummer
'
' -------------------------- Voreinstellungen ---------------------------------
'
capton!=TRUE ! Capture am Anfang on (Default)
c_s%=100 ! Beginn der Capture-Anzeige
CLR c_ss% ! Caption Schritte-Zaehler
c_percent%=cpt_alloc%/100 ! Caption Prozent-Zaehler
count_capt%=capt% ! Caption-Zaehler
modck!=FALSE ! Modem-Abfrage (wenn On line)
CLR mlen% ! Zaehler fuer Modem-Abfrage
CLR slen% ! Zaehler fuer Sequenz-Abfrage (ANSI/VT100)
logon!=FALSE ! Log am Anfang off (Default)
CLR log_nr% ! Default-Logdatei-Numerierung
count_log%=log% ! Log-Speicher-Zaehler
von_tr!=FALSE ! Beginn Terminal nach Senden
from_term!=FALSE ! Beginn Para-Formular n. Terminal-Formular
from_alt!=FALSE ! Flag Formular-Aufruf von Main oder Alt
LET del_lines$=CHR$(27)+"M" ! Zeile loeschen (s. Terminal)
' +------------------------------------+
' | Xmodem-Variabeln und Setting: |
' +------------------------------------+
soh=1 ! [S]tart [O]f [H]eader
eot=4 ! [E]nd [O]f [T]ransmission
ack=6 ! [ACK]nowledge
nak=21 ! [N]egative [A]c[K]nowledge
can=24 ! [CAN]cel
' Dim Iorec_buffer$(1024)
' Iorec
' Set_iorec_buffer
'
speed$(1)=" 300"
speed$(2)=" 600"
speed$(3)="1200"
speed$(4)="2400"
speed$(5)="4800"
speed$(6)="9600"
speed$(7)=" "
bbaud$(1)="9"
bbaud$(2)="8"
bbaud$(3)="7"
bbaud$(4)="4"
bbaud$(5)="2"
bbaud$(6)="1"
bbaud$(7)="#"
'
RESTORE boxdata ! Cover-Box fuer Show_capt erstellen
FOR get_box%=1 TO 96
READ box_data%
LET box_str$=CHR$(box_data%)
LET cvr_box$=cvr_box$+box_str$
NEXT get_box%
'
RESTORE eludb_data
FOR get_eludb%=1 TO 18
READ elud_data%
LET eludbox$=eludbox$+CHR$(elud_data%)
NEXT get_eludb%
'
boxdata:
DATA 0,34,0,14,0,1
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
DATA 255,255,255,255,224,0
'
eludb_data:
DATA 0,5,0,5,0,1,255,255,255,254,255,109,254,105,254,117,255,50
'
mth:
DATA Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Okt,Nov,Dec
'
' -------------------------- IBM-Zeichensatz ----------------------------------
'
IF EXIST("omnibus2.ibm")
OPEN "I",#2,"omnibus2.ibm"
FOR ibm%=1 TO 49
INPUT #2,ansi$(ibm%)
NEXT ibm%
CLOSE #2
ELSE ! . . .
LET fatal$=" | IBM character set | not found! "
ALERT 1,fatal$,1," Sh... ",dummy%
END
ENDIF
'
x=FRE(0)
'
@conf_rs(std_baud%,std_hands%,std_ucr%) ! Standard-Parameter einstellen
PAUSE 5
'
@rsrc_load("omnibus2.rsc",*ret) ! Resource-Datei einladen
gag!=TRUE ! Gag beim Formular
clr!=TRUE ! Cls beim Formular
'
' * Main *
'
anfang: ! * HAUPT-AUSWAHL * !
@swap_scrn ! Bildschirme vertauschen
@rsrc_gaddr(0,0,*adresse%,*ret) !Main=0 ! Adresse der Dialogbox
DPOKE (adresse%+10+capton*24),0 ! Knoepfe zurueckstellen
DPOKE (adresse%+10+captoff*24),0
IF capton!=TRUE ! Knoepfe fuer Capture
DPOKE (adresse%+10+23*24),1 ! Capton=23
ELSE
DPOKE (adresse%+10+24*24),1 ! Captoff=24
ENDIF
@draw_form ! Formular zeichnen
' ------------------------------------------------ Eintraege ins Formular -----
DEFTEXT 1,0,0,6 ! Nach dem Zeichnen des
TEXT 297,148,version$ ! Formulars kann mit Text
DEFTEXT 1,0,0,4
IF wp_down!=TRUE
TEXT 359,175,"1stWord"
ELSE
TEXT 360,175,"ASCII"
ENDIF
DEFTEXT 1,0,0,13 ! an gewuenschter Stelle
TEXT 217,254,prg$ ! reingeschrieben werden.
TEXT 105,137,"RS232 and"
TEXT 108,137+18,"terminal"
TEXT 111,137+36,"setting"
show_free$=STR$(cpt_alloc%-(count_capt%-capt%)) ! Freien Capt-Speicher
TEXT 352-LEN(show_free$)*8,310,show_free$ ! anzeigen
'
IF logon!=TRUE
TEXT 508,310,"Open"
ELSE
TEXT 500,310,"Closed"
ENDIF
' -----------------------------------------------------------------------------
@show_scrn ! Verdeckten Bildschirm zeigen
@mind_box ! Formular durchfuehren
'
IF (DPEEK(adresse%+10+23*24) AND 1)=1 ! Capton=23 Capture on/off
capton!=TRUE
ELSE
capton!=FALSE
ENDIF
'
IF (DPEEK(adresse%+10+26*24) AND 1)=1 ! Freecapt=26 Capture leeren
DPOKE (adresse%+10+26*24),0
c_s%=100 ! Capture-Anzeige auf 100%
CLR c_ss% ! Schritte-Zaehler auf 0
count_capt%=capt% ! Caption-Zaehler zurueck
GOTO anfang
ENDIF
'
IF (DPEEK(adresse%+10+19*24) AND 1)=1 ! Aboutprg=19 Ueber omnibus2
DPOKE (adresse%+10+19*24),0
@swap_scrn
@rsrc_gaddr(0,5,*adresse%,*ret) !Eigenlob=5 ! Adresse der Dialogbox
@draw_form ! Formular zeichnen
gag!=TRUE
@show_scrn
@mind_box ! Formular durchfuehren
DPOKE (adresse%+10+16*24),0 ! Oklob=16
clr!=TRUE
gag!=TRUE
down!=TRUE
GOTO anfang
ENDIF
'
FOR i_main%=2 TO 15 ! Restliche Knoepfe abfragen
IF (DPEEK(adresse%+10+i_main%*24) AND 1)=1 ! Knopf gedrueckt...
DPOKE (adresse%+10+i_main%*24),0 ! ...zurueckstellen
verteil%=i_main%-1 ! Verteiler fuer On .. Gosub
ENDIF
NEXT i_main%
'
ON verteil% GOSUB ft,at,pt,dp,dy,se,ne,ed,dr,si,en,dy,wl,hw
' 1 2 3 4 5 6 7 8 9 10 11 12 13 14
GOTO anfang
'
PROCEDURE ft ! F-Tasten
gag!=TRUE
@swap_scrn
@form_fkeys
clr!=TRUE
gag!=TRUE
down!=TRUE
RETURN
'
PROCEDURE at ! Alt-Tasten
RETURN
'
PROCEDURE pt ! Parameter und Terminal
@swap_scrn
gag!=TRUE
@form_paras
clr!=TRUE
gag!=TRUE
down!=TRUE
RETURN
'
PROCEDURE dp ! Datenpfad
DPOKE (adresse%+10+path*24),0
@swap_scrn
gag!=TRUE
@form_path
gag!=TRUE
down!=TRUE
RETURN
'
PROCEDURE dy ! Dummy-Prozedur bei nicht vorhandenem Knopf
RETURN
'
PROCEDURE se ! Editor bestimmen
@swap_scrn
gag!=TRUE
@form_setedit
gag!=TRUE
down!=TRUE
RETURN
'
PROCEDURE ne ! Nummerneingabe
@swap_scrn
gag!=TRUE
@form_dialdir
clr!=TRUE
down!=TRUE
gag!=TRUE
RETURN
'
PROCEDURE ed ! Texteditor
@exec_editor
IF wrote!
gag!=TRUE
down!=TRUE
ENDIF
RETURN
'
PROCEDURE dr ! Drucken
pr_test%=GEMDOS(&H11) ! Drucker-Test
IF pr_test%=-1 ! Drucker OK
@drucken
ELSE ! Drucker nicht OK
@rsrc_gaddr(0,6,*adresse%,*ret) ! Printerr=6 ! Drucker-Fehler melden
@swap_scrn
@draw_form
down!=TRUE
gag!=TRUE
@show_scrn
@mind_box
DPOKE (adresse%+10+3*24),0 ! Preraha=3
ENDIF
RETURN
'
PROCEDURE si ! Sichern
@sichern
RETURN
'
PROCEDURE en ! Schluss:
IF logon!=TRUE
@rsrc_gaddr(0,21,*adresse%,*ret)
@draw_form
@mind_box
DPOKE (adresse%+10+3*24),0
ELSE
GEMSYS 111 ! RSRC_FREE; RSC loeschen!
VOID GEMDOS(&H49,L:dat%) ! Daten-Puffer freigeben
VOID GEMDOS(&H49,L:capt%) ! Capture-Speicher freigeben
VOID GEMDOS(&H49,L:puff%) ! Sende/SendANSI/Drucker-Puffer freigeben
VOID GEMDOS(&H49,L:log%) ! Log-Puffer freigeben
VOID GEMDOS(&H49,L:mod%) ! Modem-Sequenz-Puffer freigeben
VOID GEMDOS(&H49,L:seq%) ! ANSI-Sequenz-Puffer freigeben
VOID GEMDOS(&H49,L:scrn%) ! Bildschirm-Rettungs-Puffer Freigeben
RESERVE FRE(0)+shrink%-255 ! Gesamtspeicher freigeben
END ! ~~~Programmende~~~
ENDIF
RETURN
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Virtuelles Ende des Programms ~~~~~~~~~~~~~
PROCEDURE wl ! Waehlen
@swap_scrn
gag!=TRUE
@form_wahl
clr!=TRUE
gag!=TRUE
down!=TRUE
RETURN
'
PROCEDURE hw ! Handwahl
LET dummy$=""
handw!=TRUE
@terminal(dummy$) ! Terminal ohne Nummer
handw!=FALSE
clr!=TRUE
gag!=TRUE
down!=TRUE
RETURN
'
PROCEDURE dimens
DIM fk_sende$(70) ! F-Taste Senden
DIM status_ein%(17) ! Wahl-Status in RSC
DIM status_wein%(17) ! Nummernfelder in Roster
DIM status_fk%(10) ! Stati der F-Tasten im F-Tasten-Roster
DIM senden$(30) ! Waehlen
DIM eintrag$(15),s_eintrag$(15) ! Name/Nummer/Speed/Parameter/Terminal
DIM linset$(17) ! Einsatz mit Name und Nummer
DIM nknoepfe$(17) ! Formularknoepfe (Telefon-"Buch"
DIM nbauds$(17) ! Baud fuer Waehlen
DIM nucr$(17) ! Ucr fuer Waehlen
DIM ftaste$(10),s_ftaste$(10) ! F-Tasten
DIM speed$(7) ! Fuer Std_speed$ und N_speed$
DIM bbaud$(7)
DIM ansi$(49) ! IBM-Zeichensatz
RETURN
'
PROCEDURE get_std_var
std_term$="ANSI "
std_knopft%=6
std_speed$="1200"
std_knopf1%=6
std_bits$="8"
std_knopf2%=21
std_parity$="N"
std_knopf3%=14
std_stop$="1"
std_knopf4%=25
std_baud%=7
std_hands%=0
std_knopf5%=35
std_ucr%=136
wp_down!=FALSE
wp_up!=FALSE
lf!=FALSE
echo!=FALSE
s_pfad$=SPACE$(47)
pfad$="\*.*"
LSET s_pfad$=pfad$
s_prg$=SPACE$(12)
prg$="ME.TTP"
LSET s_prg$=prg$
maus!=FALSE
box!=TRUE
FOR tel%=1 TO 15
LET s_eintrag$(tel%)=SPACE$(72)
eintrag$(tel%)="Name"+SPACE$(23)+"Nummer"
LSET s_eintrag$(tel%)=eintrag$(tel%)
LET nknoepfe$(tel%)="0416111823"
LET nbauds$(tel%)="7"
LET nucr$(tel%)="136"
NEXT tel%
FOR fkey_dat%=1 TO 10
LET s_ftaste$(fkey_dat%)=SPACE$(67)
ftaste$(fkey_dat%)="Hallo..."
LSET s_ftaste$(fkey_dat%)=ftaste$(fkey_dat%)
NEXT fkey_dat%
ed_alloc%=3000 ! Mem fuer Prg$
RETURN
'
PROCEDURE read_dat
BLOAD "omnibus2.bin",dat%
'
BMOVE dat%,VARPTR(std_term$),5
std_knopft=PEEK(dat%+5)
'
IF std_knopft=7 ! spaeter einordnen!!! *****************
vt100!=TRUE
ENDIF
'
BMOVE dat%+6,VARPTR(std_speed$),4
std_knopf1=PEEK(dat%+10)
std_bits$=CHR$(PEEK(dat%+11))
std_knopf2=PEEK(dat%+12)
std_parity$=CHR$(PEEK(dat%+13))
std_knopf3=PEEK(dat%+14)
std_stop$=CHR$(PEEK(dat%+15))
std_knopf4=PEEK(dat%+16)
std_baud%=PEEK(dat%+17)
std_hands%=PEEK(dat%+18)
std_knopf5=PEEK(dat%+19)
std_ucr%=PEEK(dat%+20)
IF PEEK(dat%+21)=0
wp_down!=FALSE
ELSE
wp_down!=TRUE
ENDIF
IF PEEK(dat%+22)=0
wp_up!=FALSE
ELSE
wp_up!=TRUE
ENDIF
IF PEEK(dat%+23)=0
lf!=FALSE
ELSE
lf!=TRUE
ENDIF
IF PEEK(dat%+24)=0
echo!=FALSE
ELSE
echo!=TRUE
ENDIF
CLR cl_pth%,pfad$
WHILE PEEK(dat%+25+cl_pth%)<>32
pfad$=pfad$+CHR$(PEEK(dat%+25+cl_pth%))
INC cl_pth%
EXIT IF cl_pth%=47
WEND
CLR cl_prg%,prg$
WHILE PEEK(dat%+72+cl_prg%)<>32
prg$=prg$+CHR$(PEEK(dat%+72+cl_prg%))
INC cl_prg%
EXIT IF cl_prg%=12
WEND
IF PEEK(dat%+84)=0
maus!=FALSE
ELSE
maus!=TRUE
ENDIF
IF PEEK(dat%+85)=0
box!=FALSE
ELSE
box!=TRUE
ENDIF
idat%=86
FOR i%=1 TO 15
BMOVE dat%+idat%,VARPTR(s_eintrag$(i%)),72
eintrag$(i%)=s_eintrag$(i%)
ADD idat%,72
BMOVE dat%+idat%,VARPTR(nknoepfe$(i%)),10
ADD idat%,10
nbauds$(i%)=CHR$(PEEK(dat%+idat%))
INC idat%
BMOVE dat%+idat%,VARPTR(nucr$(i%)),3
ADD idat%,3
NEXT i%
FOR i%=1 TO 10
BMOVE dat%+idat%,VARPTR(s_ftaste$(i%)),67
ftaste$(i%)=s_ftaste$(i%)
'
el_32%=LEN(ftaste$(i%)) ! Eliminate Spaces
WHILE ASC(MID$(ftaste$(i%),el_32%,1))=32
DEC el_32%
WEND
ftaste$(i%)=LEFT$(ftaste$(i%),el_32%)
'
ADD idat%,67
NEXT i%
ed_alloc%=DPEEK(dat%+idat%)
RETURN
'
PROCEDURE write_dat
BMOVE VARPTR(std_term$),dat%,5
POKE dat%+5,std_knopft
BMOVE VARPTR(std_speed$),dat%+6,4
POKE dat%+10,std_knopf1
POKE dat%+11,ASC(std_bits$)
POKE dat%+12,std_knopf2
POKE dat%+13,ASC(std_parity$)
POKE dat%+14,std_knopf3
POKE dat%+15,ASC(std_stop$)
POKE dat%+16,std_knopf4
POKE dat%+17,std_baud%
POKE dat%+18,std_hands%
POKE dat%+19,std_knopf5
POKE dat%+20,std_ucr%
POKE dat%+21,wp_down!
POKE dat%+22,wp_up!
POKE dat%+23,lf!
POKE dat%+24,echo!
'
LSET s_pfad$=pfad$
BMOVE VARPTR(s_pfad$),dat%+25,47
'
LSET s_prg$=prg$
BMOVE VARPTR(s_prg$),dat%+72,12
POKE dat%+84,maus!
POKE dat%+85,box!
'
idat%=86
FOR i%=1 TO 15
LSET s_eintrag$(i%)=eintrag$(i%)
BMOVE VARPTR(s_eintrag$(i%)),dat%+idat%,72
ADD idat%,72
BMOVE VARPTR(nknoepfe$(i%)),dat%+idat%,10
ADD idat%,10
POKE dat%+idat%,ASC(nbauds$(i%))
INC idat%
BMOVE VARPTR(nucr$(i%)),dat%+idat%,3
ADD idat%,3
NEXT i%
'
FOR i%=1 TO 10
LSET s_ftaste$(i%)=ftaste$(i%)
BMOVE VARPTR(s_ftaste$(i%)),dat%+idat%,67
ADD idat%,67
NEXT i%
'
DPOKE dat%+idat%,ed_alloc%
'
BSAVE "omnibus2.bin",dat%,2048
RETURN
'
PROCEDURE form_path
@rsrc_gaddr(0,10,*adresse%,*ret) ! Defpath=10
@draw_form
@show_scrn
PRINT AT(17,16);
FORM INPUT 47 AS pfad$
' . . .
LET frage$=" | Save | path? "
ALERT 2,frage$,1," Yes | No ",choice2%
IF choice2%=1
@rsrc_gaddr(0,15,*adresse%,*ret)
@draw_form
@write_dat
ENDIF
RETURN
'
PROCEDURE form_paras
LOCAL era%,wrt%
pt_anfang: ! (Beginn Parameter-Formular)
@rsrc_gaddr(0,1,*adresse%,*ret) !Paras ! Adresse der Dialogbox
'
IF NOT from_term! ! Wenn nicht vom Terminal-Formular
FOR era%=4 TO 9 ! Saemtliche Knoepfe loeschen:
DPOKE (adresse%+10+era%*24),0
NEXT era%
FOR era%=13 TO 15
DPOKE (adresse%+10+era%*24),0
NEXT era%
FOR era%=19 TO 21
DPOKE (adresse%+10+era%*24),0
NEXT era%
FOR era%=25 TO 26
DPOKE (adresse%+10+era%*24),0
NEXT era%
FOR era%=30 TO 31
DPOKE (adresse%+10+era%*24),0
NEXT era%
FOR era%=35 TO 37
DPOKE (adresse%+10+era%*24),0
NEXT era%
FOR era%=39 TO 40
DPOKE (adresse%+10+era%*24),0
NEXT era%
FOR era%=49 TO 50
DPOKE (adresse%+10+era%*24),0
NEXT era%
'
' ------------ Knoepfe entsprechend Std_Parameter faerben: --------------
'
DPOKE (adresse%+10+std_knopf1*24),1 ! Speed
DPOKE (adresse%+10+std_knopf2*24),1 ! Bits
DPOKE (adresse%+10+std_knopf3*24),1 ! Parity
DPOKE (adresse%+10+std_knopf4*24),1 ! Stop-Bits
DPOKE (adresse%+10+std_knopf5*24),1 ! Handshake
'
IF echo!=TRUE ! Local echo...
DPOKE (adresse%+10+30*24),1
ELSE
DPOKE (adresse%+10+31*24),1
ENDIF
'
IF lf!=TRUE ! Add LF upon CR
DPOKE (adresse%+10+39*24),1
ELSE
DPOKE (adresse%+10+40*24),1
ENDIF
'
IF wp_up!=TRUE ! WordPlus...
DPOKE (adresse%+10+49*24),1
ELSE
DPOKE (adresse%+10+49*24),0
ENDIF
IF wp_down!=TRUE
DPOKE (adresse%+10+50*24),1
ELSE
DPOKE (adresse%+10+50*24),0
ENDIF
' -----------------------------------------------------------------------
ENDIF
'
from_term!=FALSE ! Flag zurueckstellen
'
@draw_form ! Formular zeichnen
@show_scrn
@mind_box ! Formular durchfuehren
'
IF (DPEEK(adresse%+10+51*24) AND 1)=1 ! Toterm=51 Terminal-Formular aufrufen
DPOKE (adresse%+10+51*24),0
IF NOT from_alt
@swap_scrn
gag!=TRUE
ENDIF
@form_term
gag!=TRUE
down!=TRUE
@swap_scrn
GOTO pt_anfang ! Zurueck zum Parameter-Formular
ENDIF
'
IF (DPEEK(adresse%+10+45*24) AND 1)=1 ! Forgetft=45 Abbruch
DPOKE (adresse%+10+45*24),0
GOTO vergiss_para
ENDIF
'
IF (DPEEK(adresse%+10+53*24) AND 1)=1 ! Okft=53 OK
DPOKE (adresse%+10+53*24),0
'
' ----------------------------------------! Parameter einrichten:
'
FOR wrt%=4 TO 9 ! qqqq
IF (DPEEK(adresse%+10+wrt%*24) AND 1)=1
std_speed$=speed$(wrt%-3) !300/600/1200/2400/4800/9600
std_baud%=VAL(bbaud$(wrt%-3))
std_knopf1=wrt%
ENDIF
NEXT wrt%
'
IF (DPEEK(adresse%+10+19*24) AND 1)=1 !6 Bit
LET std_bits$="6"
LET sbit6%=64
LET sbit5%=0
LET std_knopf2=19
ENDIF
IF (DPEEK(adresse%+10+20*24) AND 1)=1 !7 Bit
LET std_bits$="7"
LET sbit6%=0
LET sbit5%=32
LET std_knopf2=20
ENDIF
IF (DPEEK(adresse%+10+21*24) AND 1)=1 !8 Bit
LET std_bits$="8"
LET sbit6%=0
LET sbit5%=0
LET std_knopf2=21
ENDIF
IF (DPEEK(adresse%+10+13*24) AND 1)=1 !Even
LET std_parity$="E"
LET sbit2%=4
LET sbit1%=2
LET std_knopf3=13
ENDIF
IF (DPEEK(adresse%+10+14*24) AND 1)=1 !None
LET std_parity$="N"
LET sbit2%=0
LET sbit1%=0
LET std_knopf3=14
ENDIF
IF (DPEEK(adresse%+10+15*24) AND 1)=1 !Odd
LET std_parity$="O"
LET sbit2%=4
LET sbit1%=0
LET std_knopf3=15
ENDIF
IF (DPEEK(adresse%+10+25*24) AND 1)=1 !1 Stop
LET std_stop$="1"
LET sbit4%=0
LET sbit3%=8
LET std_knopf4=25
ENDIF
IF (DPEEK(adresse%+10+26*24) AND 1)=1 !2 Stop
LET std_stop$="2"
LET sbit4%=16
LET sbit3%=8
LET std_knopf4=26
ENDIF
IF (DPEEK(adresse%+10+30*24) AND 1)=1 !Local echo on
echo!=TRUE
ENDIF
IF (DPEEK(adresse%+10+31*24) AND 1)=1 !Local echo off
echo!=FALSE
ENDIF
'
FOR wrt%=35 TO 37
IF (DPEEK(adresse%+10+wrt%*24) AND 1)=1
std_hands%=wrt%-35 !No handshake/Xon-Xoff/RTS-CTS
std_knopf5=wrt%
ENDIF
NEXT wrt%
'
IF (DPEEK(adresse%+10+39*24) AND 1)=1 !Add LF
lf!=TRUE
ENDIF
IF (DPEEK(adresse%+10+40*24) AND 1)=1 !Do not add LF
lf!=FALSE
ENDIF
IF (DPEEK(adresse%+10+49*24) AND 1)=1 !WordPlus beim Upload
wp_up!=TRUE
ELSE
wp_up!=FALSE
ENDIF
IF (DPEEK(adresse%+10+50*24) AND 1)=1 !WordPlus beim Download
wp_down!=TRUE
ELSE
wp_down!=FALSE
ENDIF
'
' -------------------------------------------------! Parameter definiert
LET sbit7%=128 ! Bit 7 immer gesetzt
LET std_ucr%=sbit7%+sbit6%+sbit5%+sbit4%+sbit3%+sbit2%+sbit1% ! std_ucr%
@conf_rs(std_baud%,std_hands%,std_ucr%) ! An rsconf uebergeben
PAUSE 5
' . . .
LET frage$=" | Save RS232 and | terminal settings? "
ALERT 2,frage$,1," Yes | No ",choice1%
' . . .
IF choice1%=1
'
@rsrc_gaddr(0,15,*adresse%,*ret) ! Moment...
@draw_form
@write_dat ! sichere...
'
ENDIF
'
ENDIF ! Ende Formular
' ---------------------------------------------------------------------------
vergiss_para:
RETURN
'
PROCEDURE form_term
@rsrc_gaddr(0,2,*adresse%,*ret) ! Terminal=2 ! Adresse der Dialogbox
'
FOR era=4 TO 7 ! Alle Knoepfe loeschen
DPOKE (adresse%+10+era*24),0
NEXT era
'
DPOKE (adresse%+10+std_knopft*24),1 ! Std-Knopf einfaerben
'
@draw_form ! Formular zeichnen
@show_scrn
@mind_box ! Formular durchfuehren
'
IF (DPEEK(adresse%+10+8*24) AND 1)=1 ! Forgettr=8 Abbruch
DPOKE (adresse%+10+8*24),0
GOTO vergiss_tr
ENDIF
'
IF (DPEEK(adresse%+10+10*24) AND 1)=1 ! Oktr=10 OK
DPOKE (adresse%+10+10*24),0
' ----------------------------------------! Terminal einrichten:
IF (DPEEK(adresse%+10+4*24) AND 1)=1
LET std_term$=CHR$(14)+CHR$(15)+" "
LET std_knopft=4
vt100!=FALSE
ENDIF
IF (DPEEK(adresse%+10+5*24) AND 1)=1
LET std_term$="IBM "
LET std_knopft=5
vt100!=FALSE
ENDIF
IF (DPEEK(adresse%+10+6*24) AND 1)=1
LET std_term$="ANSI "
LET std_knopft=6
vt100!=FALSE
ENDIF
IF (DPEEK(adresse%+10+7*24) AND 1)=1
LET std_term$="VT100"
LET std_knopft=7
vt100!=TRUE
ENDIF
' ----------------------------------------
ENDIF ! Ende Terminal-Formular
' ---------------------------------------------------------------------------
vergiss_tr:
from_term!=TRUE
@swap_scrn
RETURN
'
PROCEDURE form_wahl
@rsrc_gaddr(0,4,*adresse%,*ret) ! Dialing=4
@draw_form
@show_scrn
'
FOR zeigenr%=1 TO 15 ! Gespeicherte Eintraege
TEXT 22,(zeigenr%*21)+56,eintrag$(zeigenr%) ! in den Roster
NEXT zeigenr% ! schreiben
'
@mind_box
'
FOR steinw%=1 TO 15 ! Stati der Roster-Felder
status_wein%(steinw%)=DPEEK(adresse%+10+steinw%*24)
NEXT steinw%
'
IF (DPEEK(adresse%+10+16*24) AND 1)=1 ! Abbrechen (Nonummer=16)
DPOKE (adresse%+10+16*24),0 ! Abbruch-Knopf zurueck
GOTO verg_wahl
ENDIF
'
FOR stausw%=1 TO 15 ! Stati (1) bis (15)...
IF (status_wein%(stausw%) AND 1)=1
DPOKE (adresse%+10+stausw%*24),0 ! "Knoepfe" zurueck...
LET rost_nr%=stausw% ! Feldnummer von oben
ENDIF
NEXT stausw%
'
' --- Parameter fuer Top-Leiste und Conf_rs aus Roster-Eintrag filtern: ---
'
IF MID$(eintrag$(rost_nr%),64,1)=CHR$(32) ! Wenn Terminal leer
LET n_term$=std_term$ ! Standard-Terminal nehmen
ELSE ! andernfalls
LET n_term$=MID$(eintrag$(rost_nr%),64,8) ! Terminal aus Eintrag nehmen
ENDIF
IF MID$(eintrag$(rost_nr%),55,4)=" " ! Wenn Speed leer
LET n_speed$=std_speed$ ! Standard-Speed nehmen
ELSE ! andernfalls
LET n_speed$=MID$(eintrag$(rost_nr%),55,4) ! Speed aus Eintrag nehmen
ENDIF
LET n_bits$=MID$(eintrag$(rost_nr%),60,1) ! Datenbits aus Eintrag
LET n_parity$=MID$(eintrag$(rost_nr%),61,1) ! Parity aus Eintrag
LET n_stop$=MID$(eintrag$(rost_nr%),62,1) ! Stopbits aus Eintrag
LET n_log$=std_log$ ! Standard-Log
'
' -------- Speed und Parameter fuer Einstellung aus .tel-Datei: -------------
'
IF nbauds$(rost_nr%)="#"
LET n_baud%=std_baud%
ELSE
LET n_baud%=VAL(nbauds$(rost_nr%))
ENDIF
'
LET n_ucr%=VAL(nucr$(rost_nr%))
'
' --------------------- Speed und Parameter einstellen: ---------------------
'
@conf_rs(n_baud%,std_hands,n_ucr%)
PAUSE 5
'
' Terminal einstellen *****************************
'
' ------- Name fuer Show_action in Top-Line aus Eintrag filtern: ------------
'
LET gname$=""
LET wahl_name$=""
LET gname$=MID$(eintrag$(rost_nr%),1,26)
count_32%=1
FOR demask%=LEN(gname$) DOWNTO 1
EXIT IF MID$(gname$,demask%,1)<>CHR$(32)
INC count_32%
NEXT demask%
FOR demask%=1 TO LEN(gname$)-count_32%+1
LET wahl_name$=wahl_name$+MID$(gname$,demask%,1)
NEXT demask%
'
' ------------ Nummer aus Roster-Eintrag filtern: ---------------------------
'
LET gwahl$=""
LET wahl$=""
LET gwahl$=MID$(eintrag$(rost_nr%),27,26)
FOR demask%=1 TO LEN(gwahl$)
IF MID$(gwahl$,demask%,1)>CHR$(47) AND MID$(gwahl$,demask%,1)<CHR$(58)
LET wahl$=wahl$+MID$(gwahl$,demask%,1)
ENDIF
NEXT demask%
@terminal(wahl$)
'
' ---------------------------------------------------------------------------
'
verg_wahl:
RETURN
'
PROCEDURE form_dialdir
LOCAL era%,wrt%
eingabe: ! Label wenn nicht Abbruch
@rsrc_gaddr(0,9,*adresse%,*ret) ! Dialrost=9
@draw_form
@show_scrn
'
FOR zeige%=1 TO 15 ! Gespeicherte Eintraege
TEXT 22,(zeige%*21)+56,eintrag$(zeige%) ! in den Roster
NEXT zeige% ! schreiben
'
@mind_box
'
FOR stein%=1 TO 15 ! Stati der Roster-Felder
status_ein%(stein%)=DPEEK(adresse%+10+stein%*24)
NEXT stein%
'
IF (DPEEK(adresse%+10+16*24) AND 1)=1 ! Abbrechen (Einabbr=16)
DPOKE (adresse%+10+16*24),0 ! Abbruch-Knopf zurueck
GOTO verg_ein
ENDIF
'
IF (DPEEK(adresse%+10+18*24) AND 1)=1 ! Sichern (Einsave=18)
DPOKE (adresse%+10+18*24),0 ! Sichern-Knopf zurueck
@rsrc_gaddr(0,15,*adresse%,*ret)
@draw_form
@write_dat
GOTO verg_ein
ENDIF
' +---------------------------------------------------+
' | Wenn nicht Abbruch oder Speichern gewaehlt wurde: |
' +---------------------------------------------------+
FOR staus%=1 TO 15 ! Stati (1) bis (15)...
IF (status_ein%(staus%) AND 1)=1
DPOKE (adresse%+10+staus%*24),0 ! "Knoepfe" zurueck...
LET feld_nr%=staus% ! Feldnummer von oben
LET txt_y%=(feld_nr%*21)+56 ! Hier texten (s. Wahl)
ENDIF
NEXT staus%
' +---------------------------------------------------------+
' | Name$ und Nummer$ aus Feldeintrag filtern und reinigen: |
' +---------------------------------------------------------+
LET name$=""
LET nummer$=""
'
LET fulname$=MID$(eintrag$(feld_nr%),1,26) ! Name ist mit chr$(32) = 26 lang
count_32%=1
FOR clean32%=LEN(fulname$) DOWNTO 1
EXIT IF MID$(fulname$,clean32%,1)<>CHR$(32) ! Leerzeichen zaehlen
INC count_32%
NEXT clean32%
FOR clean32%=1 TO LEN(fulname$)-count_32%+1
LET name$=name$+MID$(fulname$,clean32%,1) ! Leerzeichen eliminieren
NEXT clean32%
'
LET fulnum$=MID$(eintrag$(feld_nr%),28,26)! Nummer ist mit chr$(32) = 26 lang
count_32%=1
FOR clean32%=LEN(fulnum$) DOWNTO 1
EXIT IF MID$(fulnum$,clean32%,1)<>CHR$(32) ! Leerzeichen zaehlen
INC count_32%
NEXT clean32%
FOR clean32%=1 TO LEN(fulnum$)-count_32%+1
LET nummer$=nummer$+MID$(fulnum$,clean32%,1) ! Leerzeichen eliminieren
NEXT clean32%
' +-------------------+
' | Eingabe-Formulare |
' +-------------------+
@scrn_save
@rsrc_gaddr(0,12,*adresse%,*ret) ! Naminput=12 ! Formular Namen
@swap_scrn
@draw_form
gag!=TRUE
@show_scrn
'
PRINT AT(27,16);
FORM INPUT 26 AS name$
'
@rsrc_gaddr(0,13,*adresse%,*ret) ! Numinput=13 ! Formular Nummern
@swap_scrn
@draw_form
@show_scrn
'
PRINT AT(27,16);
FORM INPUT 26 AS nummer$
'
par_anfang:
@rsrc_gaddr(0,3,*adresse%,*ret) !Telinpar=3 ! Formular Parametereingabe
@swap_scrn
FOR era%=2 TO 8 ! Alle Knoepfe loeschen
DPOKE (adresse%+10+era%*24),0
NEXT era%
FOR era%=10 TO 12
DPOKE (adresse%+10+era%*24),0
NEXT era%
FOR era%=14 TO 16
DPOKE (adresse%+10+era%*24),0
NEXT era%
FOR era%=18 TO 19
DPOKE (adresse%+10+era%*24),0
NEXT era%
FOR era%=21 TO 25
DPOKE (adresse%+10+era%*24),0
NEXT era%
'
LET s_knopf1=VAL(MID$(nknoepfe$(feld_nr%),1,2)) ! Knoepfe aus .tel-Datei
LET s_knopf2=VAL(MID$(nknoepfe$(feld_nr%),3,2))
LET s_knopf3=VAL(MID$(nknoepfe$(feld_nr%),5,2))
LET s_knopf4=VAL(MID$(nknoepfe$(feld_nr%),7,2))
LET s_knopf6=VAL(MID$(nknoepfe$(feld_nr%),9,2))
'
DPOKE (adresse%+10+s_knopf1*24),1 ! Knoepfe setzen
DPOKE (adresse%+10+s_knopf2*24),1
DPOKE (adresse%+10+s_knopf3*24),1
DPOKE (adresse%+10+s_knopf4*24),1
DPOKE (adresse%+10+s_knopf6*24),1
'
@draw_form
gag!=TRUE
@show_scrn
@mind_box
'
IF (DPEEK(adresse%+10+26*24) AND 1)=1 ! Abbruch (Abbreing=26)
DPOKE (adresse%+10+26*24),0 ! Knopf zurueckstellen
GOTO verg_ein
ENDIF
'
IF (DPEEK(adresse%+10+33*24) AND 1)=1 ! OK (Okeing=33)
DPOKE (adresse%+10+33*24),0 ! Knopf zurueck und...
ENDIF
' ...Parameter auslesen:
FOR wrt%=2 TO 8 ! Speeds
IF (DPEEK(adresse%+10+wrt%*24) AND 1)=1
nspeed$=speed$(wrt%-1)
nbaud$=bbaud$(wrt%-1)
nknopf$="0"+STR$(wrt%)
ENDIF
NEXT wrt%
'
IF (DPEEK(adresse%+10+14*24) AND 1)=1 !6
LET nbits$="6"
LET nbit6%=64
LET nbit5%=0
LET nknopf2$="14"
ENDIF
IF (DPEEK(adresse%+10+15*24) AND 1)=1 !7
LET nbits$="7"
LET nbit6%=0
LET nbit5%=32
LET nknopf2$="15"
ENDIF
IF (DPEEK(adresse%+10+16*24) AND 1)=1 !8
LET nbits$="8"
LET nbit6%=0
LET nbit5%=0
LET nknopf2$="16"
ENDIF
IF (DPEEK(adresse%+10+10*24) AND 1)=1 !Even
LET nparity$="E"
LET nbit2%=4
LET nbit1%=2
LET nknopf3$="10"
ENDIF
IF (DPEEK(adresse%+10+11*24) AND 1)=1 !None
LET nparity$="N"
LET nbit2%=0
LET nbit1%=0
LET nknopf3$="11"
ENDIF
IF (DPEEK(adresse%+10+12*24) AND 1)=1 !Odd
LET nparity$="O"
LET nbit2%=4
LET nbit1%=0
LET nknopf3$="12"
ENDIF
IF (DPEEK(adresse%+10+18*24) AND 1)=1 !1
LET nstop$="1"
LET nbit4%=0
LET nbit3%=8
LET nknopf4$="18"
ENDIF
IF (DPEEK(adresse%+10+19*24) AND 1)=1 !2
LET nstop$="2"
LET nbit4%=16
LET nbit3%=8
LET nknopf4$="19"
ENDIF
IF (DPEEK(adresse%+10+21*24) AND 1)=1 !Atari-TT
LET nterm$=CHR$(14)+CHR$(15)+" "
LET nknopf6$="21"
ENDIF
IF (DPEEK(adresse%+10+22*24) AND 1)=1 !IBM-TT
LET nterm$="IBM "
LET nknopf6$="22"
ENDIF
IF (DPEEK(adresse%+10+23*24) AND 1)=1 !Ansi
LET nterm$="ANSI "
LET nknopf6$="23"
ENDIF
IF (DPEEK(adresse%+10+24*24) AND 1)=1 !VT100
LET nterm$="VT100"
LET nknopf6$="24"
ENDIF
IF (DPEEK(adresse%+10+25*24) AND 1)=1 !No terminal
LET nterm$=" "
LET nknopf6$="25"
ENDIF
' +----------------------------+
' | Eintrag$() zusammenstellen |
' +----------------------------+
LET eintrag$(feld_nr%)=SPACE$(72)
LET linset$(feld_nr%)=name$+SPACE$(27-LEN(name$))+nummer$+SPACE$(27-LEN(nummer$))+nspeed$+" "+nbits$+nparity$+nstop$+" "+nterm$
LSET eintrag$(feld_nr%)=linset$(feld_nr%)
' +----------------------------+
' | Nknoepfe$() zusammenstelln |
' +----------------------------+
LET nknoepfe$(feld_nr%)=nknopf1$+nknopf2$+nknopf3$+nknopf4$+nknopf6$
' +---------------------+
' | Nbauds$() erstellen |
' +---------------------+
LET nbauds$(feld_nr%)=nbaud$
' +-------------------------+
' | Nucr$() zusammenstellen |
' +-------------------------+
LET nbit7%=128
LET nucr%=nbit7%+nbit6%+nbit5%+nbit4%+nbit3%+nbit2%+nbit1%
LET nucr$(feld_nr%)=STR$(nucr%)
'
@swap_scrn
gag!=TRUE
GOTO eingabe
'
verg_ein: ! Eingabe abgebrochen
RETURN
'
PROCEDURE exec_editor
IF box!=TRUE
@fselbox("","Editor",FALSE)
IF fs_frgt!
ELSE
LET treatfile$="*"+treatfile$ ! * = Dummy
@rsrc_gaddr(0,15,*adresse%,*ret) ! Moment
@draw_form
IF maus!=FALSE
HIDEM
ENDIF
EXEC 0,prg$,treatfile$,""
wrote!=TRUE
IF from_alt!=FALSE
VOID XBIOS(&H15,0)
ENDIF
SHOWM
ENDIF
ELSE
@rsrc_gaddr(0,15,*adresse%,*ret)
@draw_form
IF maus!=FALSE
HIDEM
ENDIF
EXEC 0,prg$,"",""
wrote!=TRUE
IF from_alt!=FALSE
VOID xbiox(&H15,0)
ENDIF
SHOWM
ENDIF
RETURN
'
PROCEDURE form_setedit
LOCAL a%
a%=m_edal%
@rsrc_gaddr(0,11,*adresse%,*ret) ! Seted=11
@draw_form
@show_scrn
PRINT AT(34,16);
FORM INPUT 12 AS prg$ ! Prg$ = Editor-Programm
LET prg$=UPPER$(prg$) ! Change Case to Upper
@swap_scrn
gag!=TRUE
@rsrc_gaddr(0,16,*adresse%,*ret)
DPOKE (adresse%+10+4*24),0
DPOKE (adresse%+10+5*24),0
DPOKE (adresse%+10+9*24),0
DPOKE (adresse%+10+10*24),0
IF maus!=TRUE
DPOKE (adresse%+10+4*24),1
ELSE
DPOKE (adresse%+10+5*24),1
ENDIF
IF box!=TRUE
DPOKE (adresse%+10+9*24),1
ELSE
DPOKE (adresse%+10+10*24),1
ENDIF
seds_anf:
@draw_form
TEXT 54*8,12*16-2,a%
@show_scrn
@mind_box
IF (DPEEK(adresse%+10+22*24) AND 1)=1 ! Memup=22
DPOKE (adresse%+10+22*24),0
IF a%<1000000
ADD a%,10000
ELSE
PRINT CHR$(7);
ENDIF
VOID XBIOS(5,L:log_scrn%,L:phs_scrn%,-1)
GOTO seds_anf
ENDIF
IF (DPEEK(adresse%+10+20*24) AND 1)=1 ! Memdwn=20
DPOKE (adresse%+10+20*24),0
IF a%>10000
SUB a%,10000
ELSE
PRINT CHR$(7);
ENDIF
VOID XBIOS(5,L:log_scrn%,L:phs_scrn%,-1)
GOTO seds_anf
ENDIF
IF (DPEEK(adresse%+10+11*24) AND 1)=1 ! Abbruch
DPOKE (adresse%+10+11*24),0
GOTO verg_seted
ENDIF
IF (DPEEK(adresse%+10+13*24) AND 1)=1 ! Speichern
DPOKE (adresse%+10+13*24),0
IF (DPEEK(adresse%+10+4*24) AND 1)=1
maus!=TRUE
ENDIF
IF (DPEEK(adresse%+10+5*24) AND 1)=1
maus!=FALSE
ENDIF
IF (DPEEK(adresse%+10+9*24) AND 1)=1
box!=TRUE
ENDIF
IF (DPEEK(adresse%+10+10*24) AND 1)=1
box!=FALSE
ENDIF
@rsrc_gaddr(0,15,*adresse%,*ret)
@draw_form
ed_alloc%=a%/100
@write_dat
@rsrc_gaddr(0,19,*adresse%,*ret)
@draw_form
@mind_box
DPOKE (adresse%+10+9*24),0 ! Okreset=9
ENDIF
verg_seted:
RETURN
'
PROCEDURE form_fkeys
fk_eingabe:
@rsrc_gaddr(0,17,*adresse%,*ret) ! F-Tasten-Rost holen
@draw_form
@show_scrn
fk_dwn%=120 ! Tasten zeigen
FOR shw_fk%=1 TO 10
TEXT 68,fk_dwn%,ftaste$(shw_fk%)
ADD fk_dwn%,24
NEXT shw_fk%
@mind_box
FOR stfk%=1 TO 10 ! Stati der Tasten-Felder
status_fk%(stfk%)=DPEEK(adresse%+10+stfk%*24)
NEXT stfk%
IF (DPEEK(adresse%+10+21*24) AND 1)=1 ! Abbruch geklickt (Fkabbr=21)
DPOKE (adresse%+10+21*24),0
GOTO verg_fk
ENDIF
IF (DPEEK(adresse%+10+24*24) AND 1)=1 ! Sichern geklickt (Fkok=24)
DPOKE (adresse%+10+24*24),0
HIDEM
@rsrc_gaddr(0,15,*adresse%,*ret)
@draw_form
@write_dat
SHOWM
GOTO verg_fk
ENDIF
FOR stausfk%=1 TO 10 ! Stati (1) bis (10)...
IF (status_fk%(stausfk%) AND 1)=1
DPOKE (adresse%+10+stausfk%*24),0 ! Knoepfe zurueck...
LET fk_nr%=stausfk% ! Feldnummer von oben
ENDIF
NEXT stausfk%
gag!=TRUE
@swap_scrn
@rsrc_gaddr(0,18,*adresse%,*ret) ! Formular Eintrag
@draw_form
@show_scrn
PRINT AT(7,16);
FORM INPUT 67 AS ftaste$(fk_nr%) ! Tasten-Eintrag eingeben
gag!=TRUE
@swap_scrn
GOTO fk_eingabe ! Zurueck zum Roster
verg_fk:
RETURN
'
PROCEDURE terminal(wahlnummer$)
DEFFILL 1,2,8 ! Selbstdarstellung...
PBOX 0,0,640,14
GRAPHMODE 3
DEFTEXT 1,16,0,13
TEXT 1,12,"omnibus2"
DEFTEXT 1,0,0,13
TEXT 79,12,"|"
TEXT 85,12," |" ! Top-Leiste
TEXT 125,12,"|"
TEXT 169,12,"|"
TEXT 300,12,"|"
DEFTEXT 1,0,0,6
'
TEXT 309,10,"CPT:" ! Capture
TEXT 343,10,"STBY"
'
DEFTEXT 1,0,0,4
TEXT 135,5,"E"
TEXT 135+9,5,"L"
TEXT 135+18,5,"U"
TEXT 135+27,5,"D"
'
DEFTEXT 1,0,0,13
TEXT 377,12,"|"
GRAPHMODE 1
DEFFILL 1,0,0 ! Ende Selbstdarstellung
'
VOID BIOS(3,2,27) ! Print At(1,2) und Bildschirm loeschen
VOID BIOS(3,2,89)
VOID BIOS(3,2,33)
VOID BIOS(3,2,32)
VOID BIOS(3,2,27)
VOID BIOS(3,2,74)
'
modck!=TRUE ! Modem abfragen
'
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Handwahl?
IF handw!=TRUE ! Handwahl war angeklickt
'
' ----------------- Standards-Parameter in Top-Leiste: --------------------
'
@show_top(std_term$,std_speed$,std_bits$,std_parity$,std_stop$)
IF capton!=TRUE
@show_capt(c_s%)
ELSE
@show_capt(0)
ENDIF
@get_elud
@get_log
jump_show!=TRUE ! zum jumpen (s.u.)
GOTO handwahl ! (Keine Nummer zum Waehlen)
ENDIF
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' ------------------- Gewaehlte Parameter in Top-Leister: -------------------
'
@show_top(n_term$,n_speed$,n_bits$,n_parity$,n_stop$)
@get_elud
@get_log
'
LET wahlnummer$="atdt"+wahlnummer$ ! Modem-Befehl vor Nummer...
IF GEMDOS(&H13)=-1 ! Stoepsel raus aus RS232?
FOR aa=1 TO LEN(wahlnummer$) ! Ja, Nummern schoen langsam
LET senden$(aa)=MID$(wahlnummer$,aa,1) ! und einzeln raus
VOID GEMDOS(&H4,ASC(senden$(aa))) ! damit Modemchen nicht ins
NEXT aa ! Hasten kommt
LET wahlnummer$="" ! Temoraeren String leeren
VOID GEMDOS(&H4,ASC(CHR$(13))) ! Return hinterher jagen
ENDIF ! -ggf. RS232 zu-
handwahl:
'
IF jump_show!=TRUE ! Handwahl-jumps (s.o.)
@show_action("Terminal!") !--------------------------------------------!
jump_show!=FALSE !Prozedur Show_action: Rechts oben gerade ab-!
GOTO jump_show !laufende Prozesse anzeigen. Automatisch !
ENDIF !Anzeige-Laenge formatieren. !
@show_action("Dial "+wahl_name$)!------------------------------------------!
LET wahl$="" ! Nummern-String auf null
jump_show: ! Handwahl-jump (s.o.)
term_begin: ! Term-Beginn nach Senden
IF von_tr!=TRUE ! Wenn von Senden (s.d.)
@show_action("On line")
von_tr!=FALSE
ENDIF
raus!=FALSE ! Ende Terminal-Schleife
backsp!=FALSE ! Backspace abfangen
escape!=FALSE ! ANSI-Sequenz-Beginn ueberwachen
sonder!=FALSE ! Spezielle Schriften
static!=TRUE ! Bis Modem "on line" meldet
vt_capp!=FALSE ! Cursor keys in application mode (VT100)
vt_kapp!=FALSE ! Keypad keys in application mode (VT100)
no_tr!=FALSE ! No trespass = RS232 gesperrt
VOID XBIOS(&H15,1) ! Cursor einschalten
VOID XBIOS(&H15,3) ! Cursor nicht blinken
HIDEM ! Maus weg
'
' ::::::::::::::::::::::::: BEGINN DER HAUPTSCHLEIFE ::::::::::::::::::::::::
'
REPEAT
'
' 1. Teil: Horch', was kommt von draussen rein?
'
IF BIOS(1,1)=-1 ! Wartet etwas an der RS232?
auxin%=BIOS(2,1) ! Ja. Nummer holen...
@auxin(auxin%) ! ...und analysieren
ELSE ! Nein. Dann (und NUR dann) Teil 2:
'
' 2. Teil: Voelker hoert die Signale!
'
IF BIOS(1,2)=-1 ! Ist etwas im Tastaturpuffer?
conin%=BIOS(2,2) ! Ja. Nummer holen...
@conin(conin%) ! ...und analysieren
ENDIF ! Nein. Wieder zu
ENDIF ! Teil 1
UNTIL MOUSEK<>0 ! Wenn Mausklick:
'
' :::::::::::::::::::::::::: ENDE DER HAUPTSCHLEIFE :::::::::::::::::::::::::
'
DEFTEXT 1,0,0,13 ! Nur zur Sicherheit
IF MOUSEK=1 ! Linke Maustaste?
@senden ! Dann senden und anschliessend
GOTO term_begin ! zurueck in die Hauptschleife
ENDIF ! Wenn nicht linke Maustaste
SHOWM ! Maus zeigen,
VOID XBIOS(&H15,0) ! Cursor aus und
dialed!=TRUE
RETURN ! Zurueck ins Hauptmenu oder Scrn
'
PROCEDURE auxin(rein%) ! == Empfangenes Zeichen analysieren ==
IF logon!=TRUE
POKE count_log%,rein%
INC count_log%
IF count_log%>=log%+512
GRAPHMODE 3
TEXT 293,12,CHR$(2)
l_fehler%=GEMDOS(&H40,l_handle%,L:512,L:log%)
count_log%=log%
TEXT 293,12,CHR$(2)
GRAPHMODE 1
ENDIF
ENDIF
' -------------------- ANSI/VT100-Sequenz analysieren -----------------------
IF sequenz!
POKE seq%+slen%,rein%
INC slen%
IF rein%=65 OR rein%=66 OR rein%=67 OR rein%=68 OR rein%=72 OR rein%=99 OR rein%=102 OR rein%=104 OR rein%=108 OR rein%=109 OR rein%=110 OR rein%=75 OR rein%=74 OR rein%=117 OR rein%=115
@sequenz(rein%,slen%)
sequenz!=FALSE
CLR slen%
ENDIF
rein%=0
ENDIF
' -------------------- Glocke? ----------------------------------------------
IF rein%=7
VOID BIOS(3,2,7)
ENDIF
' -------------------- Tabulator? -------------------------------------------
IF rein%=9
FOR ht%=1 TO 8 ! cur 8 Schritte rechts bewegen
EXIT IF CRSCOL=80
VOID BIOS(3,2,27) ! Print Chr$(27);"C";
VOID BIOS(3,2,67)
NEXT ht%
ENDIF
' -------------------- ANSI/VT100-Sequenz? ----------------------------------
IF rein%=27 ! Wenn Escape... (ev. in eigene Routine?)
escape!=TRUE ! Flag
rein%=0
ENDIF
IF rein%=91 ! Wenn eckige Klammer...
IF escape! ! Wenn vorab Escape...
rein%=0 ! Zeichen ignorieren...
sequenz!=TRUE ! und Sequenz-Flagge an
escape!=FALSE ! Flag zurueckstellen
ENDIF
ENDIF
' -------------------- VT100 special? ---------------------------------------
IF escape!
IF rein%=61 OR rein%=62 OR rein%=68 OR rein%=69 OR rein%=55 OR rein%=56 OR rein%=77 OR rein%=90
@vt_seq(rein%) ! Spezielle VT100-Sequenzen
rein%=0 ! Zeichen danach ignorieren
escape!=FALSE
ENDIF
IF rein%=72
IF escape!
' Set tab in current pos
escape!=FALSE
ENDIF
ENDIF
ENDIF
' -------------------- "Normales" Zeichen? ------------------------------
IF rein%>=32 ! Gleich oder ab Leertaste...
escape!=FALSE ! Nicht Ansi (z. Sicherheit)
' -----------------> Modem-Check <-------------------------------------
IF modck!=TRUE
IF mlen%<6 ! Erste 6 Zeichen in des "neuen"
POKE mod%+mlen%,rein% ! Strings in Modem-Check-Speicher
INC mlen% ! aufnehmen
ENDIF !
ENDIF
' ~~~~~~~~~~~~~~~~~~~ Protokollieren ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
IF capton!=TRUE ! Wenn Caption eingeschaltet
POKE count_capt%,rein% ! Zeichen speichern
INC count_capt% ! und Speicherstelle raufzaehlen
INC c_ss% ! Speicher-voll-Anzeige
IF c_ss%=c_percent% ! Prozentanzeige:
DEC c_s%
@show_capt(c_s%)
CLR c_ss%
ENDIF
ENDIF
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
IF CRSCOL<80 ! Wenn Cursor nicht rechts aussen...
' Backspace behandeln
IF rein%=32 ! Wenn Leertaste...
IF backspace!=TRUE ! Wenn durch Backspace verursacht
rein%=0 ! loeschen
backspace!=FALSE ! Flag zurueck
ENDIF
ENDIF
' Art des Zeichens analysieren
IF rein%>175 ! Wenn IBM-Grafiksatz
@pr_grafik(rein%) ! entsprechend auf Schirm ausgeben
ELSE
IF sonder!=TRUE ! Wenn Highlight, Underline oder Blink
@pr_art(rein%) ! entsprechend auf Schirm ausgeben
ELSE ! Wenn Feld-Wald&Wiesen-ASCII:
VOID BIOS(3,2,rein%) ! Normales Zeichen auf Schirm
ENDIF
ENDIF
ELSE ! Wenn nix von alledem
rein%=13 ! in Return umwandeln.
ENDIF
ENDIF !
' --------------------- Return ------------------------------------------
IF rein%=13
' ! Return behandeln:
IF CRSLIN=25 ! Wenn Cursor in letzter Zeile auf Schirm...
IF lf!=TRUE ! Wenn "Add LF upon CR" = "Yes"
VOID BIOS(3,2,27) ! Sequenz Esc+Y Zeile 2 (31+2) Spalte 1 (32+1)
VOID BIOS(3,2,89) ! = Cursor home
VOID BIOS(3,2,33)
VOID BIOS(3,2,32)
VOID BIOS(3,2,27) ! Esc+"M" = oberste Zeile loeschen...
VOID BIOS(3,2,77) ! ...und Bildschirm scrollen
VOID BIOS(3,2,27) ! Cursor wieder an Anfang letzte Zeile
VOID BIOS(3,2,89)
VOID BIOS(3,2,56)
VOID BIOS(3,2,32)
ELSE ! Wenn "Add LF upon CR" = "No"
VOID BIOS(3,2,13) ! lediglich Carriage return ausgeben
ENDIF
ELSE ! Wenn Cursor nicht in letzter Zeile...
IF lf!=TRUE ! Wenn "Add LF upon CR" = "Yes"
VOID BIOS(3,2,13) ! Carriage return...
VOID BIOS(3,2,10) ! und Line feed ausgeben
ELSE ! andernfalls
VOID BIOS(3,2,13) ! nur Carriage return ausgeben
ENDIF
ENDIF
IF capton!=TRUE ! Wenn Caption on
IF wp_down!=TRUE ! Wenn WordPlus-Wandlung download on
POKE count_capt%,30 ! Ein Wordplus-Zw'raum vor CR/LF
INC count_capt%
ENDIF
POKE count_capt%,13 ! Zeile mit CR/LF abschliessen
INC count_capt%
POKE count_capt%,10
INC count_capt%
ENDIF
IF modck!=TRUE
@modem ! Modem-Check
CLR mlen% ! Len% zurueckstellen
ENDIF
ENDIF
RETURN
'
PROCEDURE conin(key%) ! == Von Tastatur kommendes Zeichen analysieren ==
bscan%=INT(key%/65536) AND &HFF ! Scancode
bshift%=INT(key%/65536/256) ! Shift-Byte
keychar$=CHR$(key%) ! Zeichen ist ASCII(Nummer)
'
IF (bshift% AND 8)<>0 ! Alternate-Taste gedrueckt
no_tr!=TRUE
@alternate ! Welche Taste?
no_tr!=FALSE
ENDIF
'
IF keychar$="" ! Falls keine Nummer
VOID GEMDOS(&H4,ASC("")) ! Fehler abfangen
ENDIF
'
IF keychar$=CHR$(0) ! Sondertaste
key%=key% DIV 65536 ! Scancode
@scancode
IF vt100!
IF key%=&H48 OR key%=&H4B OR key%=&H50 OR key%=&H4D
IF vt_capp!
keychar$=""
@vt_cura(key%)
ELSE
keychar$=""
@vt_curn(key%)
ENDIF
ENDIF
ENDIF
ENDIF
'
IF vt100!
key%=key% DIV 65536
IF key%=>&H63 AND key%=<&H72 OR key%=&H4A OR key%=&H4E
IF vt_kapp!
keychar$=""
@vt_key(key%)
ENDIF
ENDIF
ENDIF
'
IF echo!=TRUE ! Wenn lokales Echo eingeschaltet
IF keychar$=>" "
IF CRSCOL<80
PRINT keychar$;
ELSE
keychar$=CHR$(13)
ENDIF
ENDIF
IF keychar$=CHR$(13)
IF CRSLIN=25
y_pos=CRSLIN
PRINT AT(1,2);
PRINT del_lines$;
PRINT AT(1,y_pos);
ELSE
PRINT CHR$(13)
ENDIF
ENDIF
ENDIF
'
' !-----------------------------!
IF keychar$=CHR$(8) ! Wenn Backspace gedrueckt !
PRINT CHR$(27)+"D";CHR$(32);CHR$(27)+"D";! wurde, sendet das Modem ei- !
backspace!=TRUE ! (s.o.) ! ne Leertaste; der Cursor !
ENDIF ! muss entsprechend zurueck- !
' ! gefahren und der Eingang !
' ! vorgewarnt werden (mit Flag)!
' ! ----------------------------!
'
IF no_tr!=FALSE ! Wenn gestattet (nicht lokal)
IF GEMDOS(&H13)=-1 ! Wenn RS232 bereit
VOID GEMDOS(&H4,ASC(keychar$)) ! Zeichen(Nummer) raus
ENDIF ! in die weite Welt
ENDIF
'
IF LEN(f_text$)>0
IF RIGHT$(f_text$)="|"
add_ret!=TRUE
LET f_text$=LEFT$(f_text$,LEN(f_text$)-1)
ENDIF
FOR fk_a%=1 TO LEN(f_text$)
PAUSE 4
LET fk_sende$(fk_a%)=MID$(f_text$,fk_a%,1)
VOID GEMDOS(&H4,ASC(fk_sende$(fk_a%)))
NEXT fk_a%
LET f_text$=""
IF add_ret!=TRUE
VOID GEMDOS(&H4,ASC(CHR$(13)))
add_ret!=FALSE
ENDIF
ENDIF
RETURN
'
PROCEDURE vt_cura(vtcura%)
LOCAL o%
o%=79
VOID BIOS(3,1,27)
VOID BIOS(3,1,o%)
IF vtcurn%=&H48
VOID BIOS(3,1,65)
ENDIF
IF vtcurn%=&H50
VOID BIOS(3,1,66)
ENDIF
IF vtcurn%=&H4D
VOID BIOS(3,1,67)
ENDIF
IF vtcurn%=&H4B
VOID BIOS(3,1,68)
ENDIF
RETURN
'
PROCEDURE vt_curn(vtcurn%)
VOID BIOS(3,1,27)
VOID BIOS(3,1,91)
IF vtcurn%=&H48
VOID BIOS(3,1,65)
ENDIF
IF vtcurn%=&H50
VOID BIOS(3,1,66)
ENDIF
IF vtcurn%=&H4D
VOID BIOS(3,1,67)
ENDIF
IF vtcurn%=&H4B
VOID BIOS(3,1,68)
ENDIF
RETURN
'
PROCEDURE vt_key(vtkey%)
LOCAL o%
o%=79
VOID BIOS(3,1,27)
VOID BIOS(3,1,o%)
IF vtkey%=&H4A
VOID BIOS(3,1,109)
ENDIF
IF vtkey%=&H4E
VOID BIOS(3,1,108)
ENDIF
IF vtkey%=&H63
VOID BIOS(3,1,80)
ENDIF
IF vtkey%=&H64
VOID BIOS(3,1,81)
ENDIF
IF vtkey%=&H65
VOID BIOS(3,1,82)
ENDIF
IF vtkey%=&H66
VOID BIOS(3,1,83)
ENDIF
IF vtkey%=&H67
VOID BIOS(3,1,119)
ENDIF
IF vtkey%=&H68
VOID BIOS(3,1,120)
ENDIF
IF vtkey%=&H69
VOID BIOS(3,1,121)
ENDIF
IF vtkey%=&H6A
VOID BIOS(3,1,116)
ENDIF
IF vtkey%=&H6B
VOID BIOS(3,1,117)
ENDIF
IF vtkey%=&H6C
VOID BIOS(3,1,118)
ENDIF
IF vtkey%=&H6D
VOID BIOS(3,1,113)
ENDIF
IF vtkey%=&H6E
VOID BIOS(3,1,114)
ENDIF
IF vtkey%=&H6F
VOID BIOS(3,1,115)
ENDIF
IF vtkey%=&H70
VOID BIOS(3,1,112)
ENDIF
IF vtkey%=&H71
VOID BIOS(3,1,110)
ENDIF
IF vtkey%=&H72
VOID BIOS(3,1,77)
ENDIF
RETURN
'
PROCEDURE open_log
LOCAL ck_pth$,ck_file$,ck_cplt!,ck_mth%,mth$
ck_cplt!=FALSE
ck_pth$=LEFT$(pfad$,LEN(pfad$)-3)
REPEAT
INC log_nr%
ck_file$=ck_pth$+"log_"+STR$(log_nr%)+".dwn"
IF NOT EXIST(ck_file$)
ck_cplt!=TRUE
ENDIF
UNTIL ck_cplt!=TRUE
default$="LOG_"+STR$(log_nr%)+".DWN"
@fselbox(default$,"Open Log",-1)
IF fs_frgt!
DEC log_nr%
ELSE
@toggle_log(1)
logon!=TRUE
GRAPHMODE 3
TEXT 293,12,CHR$(2)
IF EXIST(treatfile$)
l_handle%=GEMDOS(&H3D,L:VARPTR(treatfile$),0)
ELSE
l_handle%=GEMDOS(&H3C,L:VARPTR(treatfile$),0)
ENDIF
CLR ck_mth%
RESTORE mth
REPEAT
INC ck_mth%
READ mth$
UNTIL ck_mth%=VAL(MID$(DATE$,4,2))
' " . .
hinweis$=CHR$(13)+CHR$(10)+" LOG recorded "+STR$(VAL(LEFT$(DATE$,2)))+". "+mth$+" 19"+RIGHT$(DATE$,2)+" - System time: "+LEFT$(TIME$,5)+" (+"+STR$(VAL(RIGHT$(TIME$,2)))+" Seconds)"+CHR$(13)+CHR$(10)+CHR$(10)
h_handle%=GEMDOS(&H40,l_handle%,L:LEN(hinweis$),L:VARPTR(hinweis$))
TEXT 293,12,CHR$(2)
GRAPHMODE 1
ENDIF
RETURN
'
PROCEDURE show_dir
LOCAL era$,rumpf$,krit$,tail$,name$,fehler%,zeile%
rumpf$=LEFT$(pfad$,LEN(pfad$)-3)
tail$="*.*"
'
@rsrc_gaddr(0,14,*adresse%,*ret)
@draw_form !ffff
' . .
TEXT 31*8-1,10*16+7,"Enter file spec "
TEXT 31*8-1,11*16+7," or "
TEXT 31*8-1,12*16+7,"Return for "+CHR$(34)+"*.*"+CHR$(34)+"!"
PRINT AT(34,16);
FORM INPUT 12 AS tail$
krit$=rumpf$+tail$
@clr_home
'
CLR fehler%
fgetdta%=GEMDOS(47) ! Ads des Disk-Transfers-Puffers
era$=SPACE$(12) ! zum Loeschen
BMOVE VARPTR(era$),fgetdta%+30,12 ! 12 Spaces in DTP
fehler%=GEMDOS(78,L:VARPTR(krit$),0) ! Fsfirst
IF fehler%=0
name$=SPACE$(12)
BMOVE fgetdta%+30,VARPTR(name$),12
PRINT AT(3,2);name$;
PRINT SPC(2);LPEEK(fgetdta%+26)
ELSE
PRINT CHR$(7);
' . .
@show_action("No such file - press any key")
GOTO no_match
ENDIF
'
CLR zeile%,fehler%
WHILE fehler%=0
INC zeile%
era$=SPACE$(12)
BMOVE VARPTR(era$),fgetdta%+30,12
fehler%=GEMDOS(79) ! Fsnext
name$=SPACE$(12)
BMOVE fgetdta%+30,VARPTR(name$),12
IF zeile%<23
PRINT SPC(2);name$;
IF fehler%=0
PRINT SPC(2);LPEEK(fgetdta%+26)
ENDIF
ELSE
PRINT CHR$(7);
' . .
@show_action("Press any key for more!")
VOID INP(2)
CLR zeile%
@clr_home
ENDIF
WEND
PRINT CHR$(7);
' . .
@show_action("Done - press any key!")
no_match:
VOID INP(2)
RETURN
'
PROCEDURE clr_home
PRINT AT(1,2);
PRINT CHR$(27);"J";
PRINT AT(1,2);
RETURN
'
PROCEDURE view_file
LOCAL anz%,iv%,v_z%,br%,brkey%,scan%,brbr%,fehler%
IF logon!=TRUE
@scrn_save
@rsrc_gaddr(0,21,*adresse%,*ret)
@draw_form
@mind_box
DPOKE (adresse%+10+3*24),0
@scrn_show
GOTO verg_wf
ENDIF
@fselbox("","Replay file",-1)
IF fs_frgt!
GOTO verg_wf
ELSE
modck!=FALSE
capton=FALSE
@show_capt(-1)
@fltr_fnam
@show_action("View "+showfile$)
br%=300
OPEN "I",#19,treatfile$
anz%=LOF(#19)
CLOSE #19
IF anz%<32512
BLOAD treatfile$,scrn%
FOR iv%=scrn% TO scrn%+anz%
IF GEMDOS(&HB)=-1
brkey%=GEMDOS(&H7)
scan%=INT(brkey%/65536) AND &HFF
ENDIF
EXIT IF scan%=&H61
IF scan%=&H1
scan%=0
VOID INP(2)
ENDIF
IF scan%=75
ADD br%,25
ENDIF
IF scan%=77
SUB br%,25
ENDIF
br%=MAX(300,br%)
br%=MIN(900,br%)
v_z%=PEEK(iv%)
@auxin(v_z%)
FOR brbr%=1 TO br%
NEXT brbr%
NEXT iv%
ELSE
' . . .
LET s_warn$=" | Sorry, no way! | This file is too | big to replay! "
ALERT 1,s_warn$,1," Sigh! ",dummy%
ENDIF
@show_action("End "+showfile$)
modck!=TRUE
capton!=TRUE
@show_capt(c_s%)
ENDIF
verg_wf:
RETURN
'
PROCEDURE screendump
LOCAL hgrund$,ck_mth%,mth$,dumptxt$
@fselbox("","Hardcopy to Disk",TRUE)
IF fs_frgt!
ELSE
GET 80,1,520,14,hgrund$
GRAPHMODE 1
DEFFILL 1,0
PBOX 80,0,520,14
DEFTEXT 1,0,0,6
CLR ck_mth%
RESTORE mth
REPEAT
INC ck_mth%
READ mth$
UNTIL ck_mth%=VAL(MID$(DATE$,4,2))
dumptxt$=CHR$(2)+" Sys: Datum/Zeit: "+STR$(VAL(LEFT$(DATE$,2)))+". "+mth$+" 19"+RIGHT$(DATE$,2)+" - "+LEFT$(TIME$,5)+" [+"+STR$(VAL(RIGHT$(TIME$,2)))+" S] "+CHR$(2)
TEXT 85,10,dumptxt$
BSAVE treatfile$,XBIOS(2),32000
PUT 80,1,hgrund$
CLR hgrund$,dumptxt$
ENDIF
RETURN
'
PROCEDURE alternate ! Alternate-Kombination abfragen
DEFTEXT 1,0,0,13 ! Nur z. Sicherheit
IF bscan%=&H42 ! F8: Sende Xmodem
@fselbox("","Xmodem upload",TRUE)
IF fs_frgt!
GOTO vergiss_xs
ELSE
@fltr_fnam ! Dateiname aus Pfad filtern...
@show_action("Uploading "+showfile$) ! ... und anzeigen
@xmodem_send(treatfile$)
@show_action("On line")
ENDIF
vergiss_xs: ! Falls OK ohne Datei
ENDIF
IF bscan%=&H43 ! F9 Xmodem empfang
@fselbox("","Xmodem download",TRUE)
IF fs_frgt!
GOTO vergiss_xr ! und den Quatsch vergessen
ELSE
@fltr_fnam
@show_action("Downloading "+showfile$) ! ... und anzeigen
@xmodem_receive(treatfile$)
@show_action("On line")
ENDIF
vergiss_xr: ! Falls OK ohne Datei
ENDIF
IF bscan%=&H3B ! Alt-F1 Log
IF logon!=FALSE
@open_log
ELSE
GRAPHMODE 3
TEXT 293,12,CHR$(2)
rest%=count_log%-log%
r_fehler%=GEMDOS(&H40,l_handle%,L:rest%,L:log%)
count_log%=log%
endlog$=CHR$(13)+CHR$(10)+CHR$(13)+CHR$(10)+"---End of LOG---"+CHR$(13)+CHR$(10)+CHR$(10)
e_handle%=GEMDOS(&H40,l_handle%,L:LEN(endlog$),L:VARPTR(endlog$))
s_fehler%=GEMDOS(&H3E,l_handle%)
TEXT 293,12,CHR$(2)
GRAPHMODE 1
@toggle_log(0)
logon!=FALSE
ENDIF
ENDIF
IF bscan%=&H3C ! Alt-F2 Capture
IF capton!=FALSE
@show_capt(c_s%)
capton!=TRUE
ELSE
@show_capt(0)
capton!=FALSE
ENDIF
ENDIF
IF bscan%=&H3D ! Alt-F3 Bildschirm loeschen
@clr_home
ENDIF
IF bscan%=&H12 ! Alt-E Echo
IF echo!=TRUE
echo!=FALSE
@show_elud(135,0)
ELSE
echo!=TRUE
@show_elud(135,1)
ENDIF
ENDIF
IF bscan%=&H26 ! Alt-L CR/LF
IF lf!=TRUE
lf!=FALSE
@show_elud(135+9,0)
ELSE
lf!=TRUE
@show_elud(135+9,1)
ENDIF
ENDIF
IF bscan%=&H16 ! Alt-U WordPlus Upload
IF wp_up!=TRUE
wp_up!=FALSE
@show_elud(135+18,0)
ELSE
wp_up!=TRUE
@show_elud(135+18,1)
ENDIF
ENDIF
IF bscan%=&H20 ! Alt-D WordPlus Download
IF wp_down!=TRUE
wp_down!=FALSE
@show_elud(135+27,0)
ELSE
wp_down!=TRUE
@show_elud(135+27,2)
ENDIF
ENDIF
IF bscan%=&H44 ! Alt-F10 File anschauen
@view_file
ENDIF
IF bscan%=&H23 ! Alt-H Screendump auf Disk
@screendump
ENDIF
IF bscan%=&H11 ! Alt-W Waehlen
IF static!=TRUE
from_alt!=TRUE
dialed!=FALSE
handw!=FALSE
SHOWM
@scrn_save
@form_wahl
@scrn_show
HIDEM
from_alt!=FALSE
ELSE
@disagree
ENDIF
ENDIF
IF bscan%=&H32 ! Alt-M F-Tasten
from_alt!=TRUE
VOID BIOS(3,2,27)
VOID BIOS(3,2,106)
VOID XBIOS(&H15,0)
SHOWM
@scrn_save
@form_fkeys
@scrn_show
HIDEM
VOID XBIOS(&H15,1)
VOID XBIOS(&H15,3)
VOID BIOS(3,2,27)
VOID BIOS(3,2,107)
from_alt!=FALSE
ENDIF
IF bscan%=&H1E ! Alt-A Editor
from_alt!=TRUE
VOID BIOS(3,2,27)
VOID BIOS(3,2,106)
BMOVE XBIOS(2),log_scrn%,32000
@exec_editor
BMOVE log_scrn%,XBIOS(2),32000
HIDEM
VOID XBIOS(&H15,1)
VOID XBIOS(&H15,3)
VOID BIOS(3,2,27)
VOID BIOS(3,2,107)
from_alt!=FALSE
ENDIF
IF bscan%=&H30 ! Alt-B Datenpfad
from_alt!=TRUE
VOID BIOS(3,2,27) ! Cursor sichern und aus
VOID BIOS(3,2,106)
VOID XBIOS(&H15,0)
SHOWM
@scrn_save
@form_path
@scrn_show
HIDEM
VOID XBIOS(&H15,1) ! Cursor ein und wiederherstellen
VOID XBIOS(&H15,3)
VOID BIOS(3,2,27)
VOID BIOS(3,2,107)
from_alt!=FALSE
ENDIF
IF bscan%=&H1F ! Alt-S Parameter/Terminal
IF static!=TRUE
from_alt!=TRUE
VOID BIOS(3,2,27)
VOID BIOS(3,2,106)
VOID XBIOS(&H15,0)
SHOWM
@scrn_save
@form_paras
@scrn_show
HIDEM
VOID XBIOS(&H15,1)
VOID XBIOS(&H15,3)
VOID BIOS(3,2,27)
VOID BIOS(3,2,107)
from_alt!=FALSE
ELSE
@disagree
ENDIF
ENDIF
IF bscan%=&H21 ! Alt-F Directory
VOID BIOS(3,2,27) ! Cursor sichern und aus
VOID BIOS(3,2,106)
VOID XBIOS(&H15,0)
@scrn_save
@show_dir
@scrn_show
HIDEM
VOID XBIOS(&H15,1) ! Cursor ein und wiederherstellen
VOID XBIOS(&H15,3)
VOID BIOS(3,2,27)
VOID BIOS(3,2,107)
ENDIF
IF bscan%=&H61 ! Alt-Undo
' . . .
LET endwarn$=" | Quit | omnibus2? "
ALERT 2,endwarn$,1," Yes | No ",endvar%
IF endvar%=1
END
ENDIF
ENDIF
RETURN
'
PROCEDURE disagree
SOUND 1,15,5,3
WAVE 1,1,11,444,15
SOUND 1,0,0,0,0
RETURN
'
PROCEDURE put_log_scrn
IF NOT down!
psnd%=16000
pssnd%=3200
BMOVE log_scrn%+16000,XBIOS(2)+16000,3200
BMOVE log_scrn%+32000-16000,XBIOS(2)+32000-16000,3200
FOR i%=1 TO 5
ADD pssnd%,3200
BMOVE log_scrn%+psnd%,XBIOS(2)+psnd%,3200
BMOVE log_scrn%+32000-psnd%,XBIOS(2)+32000-psnd%,3200
SOUND 1,15,pssnd%/1000,6
WAVE 1,1,9,8000,1
SUB psnd%,3200
NEXT i%
BMOVE log_scrn%+psnd%,XBIOS(2)+psnd%,3200
SOUND 1,0,0,0,0
ELSE
pssnd%=16000
BMOVE log_scrn%,XBIOS(2),3200
FOR i%=3200 TO 16000 STEP 3200
SUB pssnd%,3200
BMOVE log_scrn%+32000-i%,XBIOS(2)+32000-i%,3200
BMOVE log_scrn%+i%,XBIOS(2)+i%,3200
SOUND 1,15,pssnd%/1000,6
WAVE 1,1,9,8000,1
NEXT i%
SOUND 1,0,0,0,0
ENDIF
down!=FALSE
RETURN
'
PROCEDURE scancode ! Sondertasten abfragen
LOCAL screen$
DEFTEXT 1,0,0,13 ! Nur z. Sicherheit
IF key%=&H62 ! Help-Taste:
@help
ENDIF
IF key%=&H3B ! F-Tasten...
f_text$=ftaste$(1)
ENDIF
IF key%=&H3C
f_text$=ftaste$(2)
ENDIF
IF key%=&H3D
f_text$=ftaste$(3)
ENDIF
IF key%=&H3E
f_text$=ftaste$(4)
ENDIF
IF key%=&H3F
f_text$=ftaste$(5)
ENDIF
IF key%=&H40
f_text$=ftaste$(6)
ENDIF
IF key%=&H41
f_text$=ftaste$(7)
ENDIF
IF key%=&H42
f_text$=ftaste$(8)
ENDIF
IF key%=&H43
f_text$=ftaste$(9)
ENDIF
IF key%=&H44
f_text$=ftaste$(10)
ENDIF
RETURN
'
PROCEDURE help
@scrn_save
SHOWM
@rsrc_gaddr(0,20,*adresse%,*ret)
@draw_form
@mind_box
DPOKE (adresse%+10+1*24),0 ! OK-Knopf zurueck
HIDEM
@scrn_show
RETURN
'
' #################### ANSI/VT100-SEQUENZEN ANALYSIEREN #######################
'
PROCEDURE vt_seq(reinvt%) ! Esc-=/>/D/M/E/7/8-Sequenz:
IF reinvt%=61 ! "=" keypad keys in application mode
vt_kapp!=TRUE
ENDIF
IF reinvt%=62 ! ">" keypad keys in numeric mode
vt_kapp!=FALSE
ENDIF
IF reinvt%=55 ! "7" Save cur pos (spaeter: auch Art sichern)
VOID BIOS(3,2,27) ! Print Chr$(27);"j";
VOID BIOS(3,2,106)
ENDIF
IF reinvt%=56 ! "8" Restore cur pos (spaeter: auch Art)
VOID BIOS(3,2,27) ! Print Chr$(27);"k";
VOID BIOS(3,2,107)
ENDIF
IF reinvt%=68 ! "D" Down
IF CRSLIN=25
VOID BIOS(3,2,27) ! Print Chr$(27);"j";
VOID BIOS(3,2,106)
VOID BIOS(3,2,27) ! Print At(1,2); (cur home)
VOID BIOS(3,2,89)
VOID BIOS(3,2,33)
VOID BIOS(3,2,32)
VOID BIOS(3,2,27) ! Print Chr$(27);"M";
VOID BIOS(3,2,77)
VOID BIOS(3,2,27) ! Print Chr$(27);"k";
VOID BIOS(3,2,107)
ELSE
VOID BIOS(3,2,27) ! Print Chr$(27);"B";
VOID BIOS(3,2,66)
ENDIF
ENDIF
IF reinvt%=77 ! "M" Up
IF CRSLIN=2
VOID BIOS(3,2,27) ! Print Chr$(27);"j";
VOID BIOS(3,2,106)
VOID BIOS(3,2,27) ! Print Chr$(27);"L";
VOID BIOS(3,2,76)
VOID BIOS(3,2,27) ! Print Chr$(27);"k";
VOID BIOS(3,2,107)
ELSE
VOID BIOS(3,2,27) ! Print chr$(27);"A";
VOID BIOS(3,2,65)
ENDIF
ENDIF
IF reinvt%=69 ! "D" CR/LF
IF CRSLIN=25
VOID BIOS(3,2,27) ! Print At(1,2); (cur home)
VOID BIOS(3,2,89)
VOID BIOS(3,2,33)
VOID BIOS(3,2,32)
VOID BIOS(3,2,27) ! Print Chr$(27);"M";
VOID BIOS(3,2,77)
VOID BIOS(3,2,27) ! Print At(1,25);
VOID BIOS(3,2,89)
VOID BIOS(3,2,32+25)
VOID BIOS(3,2,32)
ELSE
VOID BIOS(3,2,10)
VOID BIOS(3,2,13)
ENDIF
ENDIF
IF reinvt%=90 ! "Z" Request Terminal Type
@rep_vt100
ENDIF
RETURN
'
PROCEDURE rep_vt100
IF vt100!
VOID BIOS(3,1,27)
VOID BIOS(3,1,91)
VOID BIOS(3,1,63)
VOID BIOS(3,1,49)
VOID BIOS(3,1,59)
VOID BIOS(3,1,48)
VOID BIOS(3,1,99)
ENDIF
RETURN
'
PROCEDURE sequenz(reinan%,len%) ! Esc-chr$(91)-Sequenz:
LOCAL cnt%,cl,pl%,pl1%,pl2%,dpl!,pc%,pc1%,pc2%,dpc!
' -------------------- Speziell VT100 ---------------------------------------
IF reinan%=110
IF len%=2
IF PEEK(seq%)=54 ! "6n" - Request for
' cur pos report
dpl!=FALSE
cl=CRSLIN-1
IF cl<10
pl%=cl+48
ELSE
dpl!=TRUE
pl%=INT(cl/10)
pl1%=pl%+48
pl2%=cl-(pl%*10)+48
ENDIF
dpc!=FALSE
IF CRSCOL<10
pc%=CRSCOL+48
ELSE
dpc!=TRUE
pc%=INT(CRSCOL/10)
pc1%=pc%+48
pc2%=CRSCOL-(pc%*10)+48
ENDIF
'
VOID BIOS(3,1,27)
VOID BIOS(3,1,91)
IF NOT dpl!
VOID BIOS(3,1,pl%)
ELSE
VOID BIOS(3,1,pl1%)
VOID BIOS(3,1,pl2%)
ENDIF
VOID BIOS(3,1,59)
IF NOT dpc!
VOID BIOS(3,1,pc%)
ELSE
VOID BIOS(3,1,pc1%)
VOID BIOS(3,1,pc2%)
ENDIF
VOID BIOS(3,1,82)
ENDIF
ENDIF
ENDIF
IF reinan%=99 ! "c" oder "0c" is it VT100?
@rep_vt100
ENDIF
IF reinan%=104 ! "h" cursor keys in applications mode
vt_capp!=TRUE
ENDIF
IF reinan%=108 ! "l" cursor keys in positioning mode
vt_capp!=FALSE
ENDIF
' -------------------- ANSI -------------------------------------------------
IF reinan%=109 ! Wenn es ein "m" war
IF len%=1 ! Wenn nur "m"
VOID BIOS(3,2,27) ! Print Chr$(27);"q";
VOID BIOS(3,2,113) ! (normal video)
sonder!=FALSE ! keine Sondercharakter
ENDIF
IF len%=2 ! Wenn "nm"
IF PEEK(seq%)=48 ! Wenn "0m"
VOID BIOS(3,2,27) ! Print Chr$(27);"q";
VOID BIOS(3,2,113) ! (normal video)
sonder!=FALSE ! Keine Sondercharakter
ENDIF
IF PEEK(seq%)=52 ! Wenn "4m"
sonder!=TRUE ! Sondercharakter
DEFTEXT 1,8,0,13 ! 8 (underline)
ENDIF
IF PEEK(seq%)=49 ! Wenn "1m"
sonder!=TRUE ! Sondercharakter
DEFTEXT 1,1,0,13 ! 1 (fett)
ENDIF
IF PEEK(seq%)=53 ! Wenn "5m"
sonder!=TRUE ! Sondercharakter
DEFTEXT 1,2,0,13 ! 2 (hell)
ENDIF
IF PEEK(seq%)=55 ! Wenn "7m"
VOID BIOS(3,2,27) ! Print Chr$(27);"p";
VOID BIOS(3,2,112) ! (inverse video)
ENDIF
ENDIF
ENDIF
IF reinan%=115 ! Wenn "s"
VOID BIOS(3,2,27) ! Print Chr$(27);"j";
VOID BIOS(3,2,106) ! (curpos sichern)
ENDIF
IF reinan%=117 ! Wenn "u"
VOID BIOS(3,2,27) ! Print Chr$(27);"k";
VOID BIOS(3,2,107) ! (curpos wieder herstellen)
ENDIF
IF reinan%=72 OR reinan%=102 ! Wenn es "H" oder "f" war:
IF len%=1 ! Wenn nur "H" oder "f"
VOID BIOS(3,2,27) ! Print At(1,2); (curhome)
VOID BIOS(3,2,89)
VOID BIOS(3,2,33)
VOID BIOS(3,2,32)
ENDIF
IF len%=2 ! Wenn es ";H" oder ";f" war:
IF PEEK(seq%)=59
VOID BIOS(3,2,27) ! Print At(2,3);
VOID BIOS(3,2,89)
VOID BIOS(3,2,34)
VOID BIOS(3,2,33)
ENDIF
ENDIF
' +-----------------------------------------------------------------------+
' | Max = Der jeweils hoehere Wert in der Klammer; muss, damit der Cursor |
' | nicht in die Topleiste (Zeile 1 des VT52-Schirms) oder sonstwo ueber |
' | den Rand hinauslaeuft. |
' +-----------------------------------------------------------------------+
IF len%=3 ! Wenn es "n;H" oder ";nH" war:
IF PEEK(seq%+1)=59 ! Wenn "n;H"
' +------------------------------------+
LET set_y%=MAX(32,PEEK(seq%)-17) !Umrechnung: Geholt mit Peek wird die|
VOID BIOS(3,2,27) !ASCII-Nummer des Zeichens (Zahl). |
VOID BIOS(3,2,89) !Die Nummer minus 48 ergibt den Wert.|
VOID BIOS(3,2,set_y%+1) !In der VT52-Sequenz "Esc-Y-zl-cl" |
VOID BIOS(3,2,32) !muss zu diesem Wert wieder 31 ad- |
ENDIF !diert werden. Daher: Schon beim Ho- |
' !len mit Peek nur 17 subtrahieren |
' !(48-31=17). Mit Max wird sicherge- |
' !stellt, dass die VT52-Sequenz min. |
' !32 erhaelt, weil sonst der Cursor |
' !auf Zeile 0 oder Spalte 0 gesetzt |
' !wuerde. Schliesslich muss bei der |
' !Zeilenangabe stets 1 addiert werden,|
' !weil die oberste Zeile des omnibus2-|
' !Bildschirms die Zeile 2 des VT52- |
' !Emulators ist. |
' +------------------------------------+
IF PEEK(seq%)=59 ! Wenn ";nH"
LET set_x%=MAX(32,PEEK(seq%+1)-17)
VOID BIOS(3,2,27) ! Print At(Set_x%,2);
VOID BIOS(3,2,89)
VOID BIOS(3,2,33)
VOID BIOS(3,2,set_x%)
ENDIF
ENDIF
IF len%=4
IF PEEK(seq%+1)=59 ! Wenn "n;nH":
LET set_y%=MAX(32,PEEK(seq%)-17) ! n als Parameter
LET set_x%=MAX(32,PEEK(seq%+2)-17) ! uebernehmen
VOID BIOS(3,2,27) ! Print At(Set_x%,Set_y%+1);
VOID BIOS(3,2,89)
VOID BIOS(3,2,set_y%+1)
VOID BIOS(3,2,set_x%)
ENDIF
' +---------------------------------------------------------------+
' |Wenn zwei Zahlen uebergeben werden (";nnH" etc.), ist die Um- |
' |rechnung: Erste ASCII-Nummer minus 48 (gibt Wert), mal 10 plus |
' |zweite ASCII-Nummer minus 48 (gibt Wert). |
' +---------------------------------------------------------------+
'
IF PEEK(seq%)=59 ! Wenn ";nnH":
LET set_x%=(PEEK(seq%+1)-48)*10+PEEK(seq%+2)-48
VOID BIOS(3,2,27) ! Print At(Set_x%,2);
VOID BIOS(3,2,89)
VOID BIOS(3,2,33)
VOID BIOS(3,2,31+MAX(1,set_x%)) ! Max im Falle dass 00
ENDIF
IF PEEK(seq%+2)=59 ! Wenn "nn;H":
LET set_y%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48
VOID BIOS(3,2,27) ! Print At(1,Set_y%);
VOID BIOS(3,2,89)
VOID BIOS(3,2,31+MAX(2,set_y%+1)) ! Max im Falle dass 00 oder 01
VOID BIOS(3,2,32)
ENDIF
ENDIF
IF len%=5 ! Wenn "n;nnH" oder "nn;nH" bzw. f
IF PEEK(seq%+1)=59 ! Wenn "n;nnH" oder "n;nnf"
LET set_y%=MAX(32,PEEK(seq%)-17) ! n und nn als Parameter...
LET set_x%=(PEEK(seq%+2)-48)*10+PEEK(seq%+3)-48
VOID BIOS(3,2,27) ! Print At(Set_x%,Set_y%+1);
VOID BIOS(3,2,89)
VOID BIOS(3,2,set_y%+1)
VOID BIOS(3,2,31+MAX(1,set_x%))
ENDIF
IF PEEK(seq%+2)=59 ! Wenn "nn;nH" oder "nn;nf"
LET set_y%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48
LET set_x%=MAX(32,PEEK(seq%+3)-17)
VOID BIOS(3,2,27) ! Print At(Set_x%,Set_y%+1);
VOID BIOS(3,2,89)
VOID BIOS(3,2,31+MAX(2,set_y%+1))
VOID BIOS(3,2,set_x%)
ENDIF
ENDIF
IF len%=6 ! Wenn "nn;nnH" oder "nn;nnf"
LET set_y%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48
LET set_x%=(PEEK(seq%+3)-48)*10+PEEK(seq%+4)-48
VOID BIOS(3,2,27) ! Print At(Set_x%,Set_y%+1);
VOID BIOS(3,2,89)
VOID BIOS(3,2,31+MAX(2,set_y%+1))
VOID BIOS(3,2,31+MAX(1,set_x%))
ENDIF
ENDIF
'
IF reinan%=74 ! Wenn es ein "J" war:
IF len%=1 ! Wenn "J" alleine
VOID BIOS(3,2,27) ! Print Chr$(27);"J";
VOID BIOS(3,2,74) ! Von curpos bis screenend del
ELSE ! Wenn mehr als nur "J"
IF PEEK(seq%)=48 ! Wenn "0J"
VOID BIOS(3,2,27) ! Print Chr$(27);"J";
VOID BIOS(3,2,74) ! Von curpos bis screenend del
ENDIF
IF PEEK(seq%)=49 ! Wenn "1J"
l_posy%=CRSLIN ! Y-pos sichern
VOID BIOS(3,2,27) ! Print Chr$(27);"j";
VOID BIOS(3,2,106) ! (curpos sichern)
VOID BIOS(3,2,27) ! Print Chr$(27);"f";
VOID BIOS(3,2,102) ! (cur ausschalten,
VOID BIOS(3,2,27) ! Print At(1,2);
VOID BIOS(3,2,89)
VOID BIOS(3,2,33)
VOID BIOS(3,2,32)
FOR loesch%=2 TO l_posy%-1! von curhome bis Zeile, in der Cursor steht,
VOID BIOS(3,2,27) ! Print At(1,Loesch%);
VOID BIOS(3,2,89)
VOID BIOS(3,2,31+loesch%)
VOID BIOS(3,2,32)
VOID BIOS(3,2,27) ! Print Chr$(27);"K";
VOID BIOS(3,2,75) ! (Zeile loeschen)
NEXT loesch%
VOID BIOS(3,2,27) ! Print Chr$(27);"k";
VOID BIOS(3,2,107) ! curpos wiederherstellen
VOID BIOS(3,2,27) ! Print Chr$(27);"o";
VOID BIOS(3,2,111) ! bis Anfang dieser Zeile del
VOID BIOS(3,2,27) ! Print Chr$(27);"e";
VOID BIOS(3,2,101) ! cur einschalten)
ENDIF
IF PEEK(seq%)=50 ! Wenn "2J"
VOID BIOS(3,2,27) ! Print Chr$(27);"f";
VOID BIOS(3,2,102) ! (cur aus)
VOID BIOS(3,2,27) ! Print At(1,2); (cur home)
VOID BIOS(3,2,89)
VOID BIOS(3,2,33)
VOID BIOS(3,2,32)
VOID BIOS(3,2,27) ! Print Chr$(27);"J";
VOID BIOS(3,2,74) ! bis screenend loeschen
VOID BIOS(3,2,27) ! Print Chr$(27);"e";
VOID BIOS(3,2,101) ! (cur ein)
ENDIF
ENDIF
ENDIF
IF reinan%=75 ! Wenn es ein "K" war:
IF len%=1 ! Wenn nur "K"
VOID BIOS(3,2,27) ! Print Chr$(27);"K";
VOID BIOS(3,2,75) ! Bis Zeilenende loeschen
ELSE ! Andernfalls...
IF PEEK(seq%)=48 ! Wenn "0K"
VOID BIOS(3,2,27) ! Print Chr$(27);"K";
VOID BIOS(3,2,75) ! Bis Zeilenende loeschen
ENDIF
IF PEEK(seq%)=49 ! Wenn "1K"
VOID BIOS(3,2,27) ! Print Chr$(27);"o";
VOID BIOS(3,2,111) ! Bis Zeilenanfang loeschen
ENDIF
IF PEEK(seq%)=50 ! Wenn "2K"
VOID BIOS(3,2,27) ! Print Chr$(27);"j";
VOID BIOS(3,2,106) ! (curpos sichern)
VOID BIOS(3,2,27) ! Print Chr$(27);"M";
VOID BIOS(3,2,77) ! (Ganze Zeile del, scroll Rest)
VOID BIOS(3,2,27) ! Print Chr$(27);"k";
VOID BIOS(3,2,107) ! (curspos wiederherstellen)
ENDIF
ENDIF
ENDIF
IF reinan%=65 ! Wenn "A" (cur rauf)
IF len%=1 ! Wenn nur "A"
INC len% ! Mache "1A" daraus
POKE seq%,49 !(eleganter waere ein Double!)
POKE seq%+1,65
ENDIF
IF len%=2 ! Wenn nur eine Zahl vor "A"
auf%=PEEK(seq%)-48 ! Diese Zahl=Anzahl Bewegungen
FOR aufi%=1 TO auf% ! cur bewegen
EXIT IF CRSLIN=2 ! ausser, er ist ganz oben
VOID BIOS(3,2,27) ! Print Chr$(27);"A";
VOID BIOS(3,2,65)
NEXT aufi%
ELSE ! Wenn mehr (zwei) Zahlen vor "A"
LET auf%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48 ! Anzahl der Bewegungen
FOR aufi%=1 TO auf% ! cur bewegen
EXIT IF CRSLIN=2 ! ausser, er ist ganz oben
VOID BIOS(3,2,27) ! Print Chr$(27);"A";
VOID BIOS(3,2,65)
NEXT aufi%
ENDIF
ENDIF
IF reinan%=66 ! Wenn "B" (cur runter)
IF len%=1
INC len%
POKE seq%,49
POKE seq%+1,66
ENDIF
IF len%=2 ! Wenn nur eine Zahl vor "B"
ab%=PEEK(seq%)-48 ! Diese Zahl=Anzahl Bewegungen
FOR abi%=1 TO ab% ! cur bewegen
VOID BIOS(3,2,27) ! Print Chr$(27);"B";
VOID BIOS(3,2,66)
NEXT abi%
ELSE ! Wenn mehr Zahlen vor "B"
LET ab%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48 ! Anzahl der Bewegungen
FOR abi%=1 TO ab% ! cur bewegen
VOID BIOS(3,2,27) ! Print Chr$(27);"B";
VOID BIOS(3,2,66)
NEXT abi%
ENDIF
ENDIF
IF reinan%=67 ! Wenn "C" (cur rechts)
IF len%=1
INC len%
POKE seq%,49
POKE seq%+1,67
ENDIF
IF len%=2 ! Wenn nur eine Zahl vor "C"
recht%=PEEK(seq%)-48 ! Diese Zahl=Anzahl Bewegungen
FOR rechti%=1 TO recht% ! cur bewegen
VOID BIOS(3,2,27) ! Print Chr$(27);"C";
VOID BIOS(3,2,67)
NEXT rechti%
ELSE ! Wenn mehr Zahlen vor "C"
LET recht%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48 ! Anzahl der Bewegungen
FOR rechti%=1 TO recht% ! cur bewegen
VOID BIOS(3,2,27) ! Print Chr$(27);"C";
VOID BIOS(3,2,67)
NEXT rechti%
ENDIF
ENDIF
IF reinan%=68 ! Wenn "D" (cur links)
IF len%=1
INC len%
POKE seq%,49
POKE seq%+1,68
ENDIF
IF len%=2 ! Wenn nur eine Zahl vor "D"
link%=PEEK(seq%)-48 ! Diese Zahl=Anzahl Bewegungen
FOR linki%=1 TO link% ! cur bewegen
EXIT IF CRSCOL=1 ! ausser er ist ganz links
VOID BIOS(3,2,27) ! Print Chr$(27);"D";
VOID BIOS(3,2,68)
NEXT linki%
ELSE ! Wenn mehr Zahlen vor "D"
LET link%=(PEEK(seq%)-48)*10+PEEK(seq%+1)-48 ! Anzahl der Bewegungen
FOR linki%=1 TO link% ! cur bewegen
EXIT IF CRSCOL=1 ! ausser er ist ganz links
VOID BIOS(3,2,27) ! Print Chr$(27);"D";
VOID BIOS(3,2,68)
NEXT linki%
ENDIF
ENDIF
CLR reinan$,bb$
RETURN
'
' #############################################################################
PROCEDURE pr_grafik(zeichen%) ! Grafikzeichen ausgeben
IF zeichen%>223 ! Grafiksatz begrenzen
IF zeichen%=254 ! Ausnahme: Char 254
VOID BIOS(3,2,27) ! Print Chr$(27)+"f";
VOID BIOS(3,2,102) ! Cursor aus
PUT (CRSCOL-1)*8,(CRSLIN-1)*16,ansi$(49) ! Char 254 ausgeben
VOID BIOS(3,2,27) ! Print Chr$(27)+"C";
VOID BIOS(3,2,67) ! Cur eins nach rechts
VOID BIOS(3,2,27) ! Print Chr$(27)+"e";
VOID BIOS(3,2,101) ! Cursor einschalten
ELSE ! Nicht Grafiksatz
VOID BIOS(3,2,zeichen%) ! Normale Ausgabe
ENDIF
ELSE ! Grafiksatz
VOID BIOS(3,2,27) ! Print Chr$(27)+"f";
VOID BIOS(3,2,102) ! Cursor aus
PUT (CRSCOL-1)*8,(CRSLIN-1)*16,ansi$(zeichen%-175)
VOID BIOS(3,2,27) ! Print Chr$(27)+"C";
VOID BIOS(3,2,67) ! Cur eins nach rechts
VOID BIOS(3,2,27) ! Print Chr$(27)+"e";
VOID BIOS(3,2,101) ! Cursor einschalten
ENDIF
RETURN
'
PROCEDURE pr_art(reinart%) ! Sonderschrift ausgeben
VOID BIOS(3,2,27) ! Print Chr$(27)+"f";
VOID BIOS(3,2,102) ! Cursor aus
TEXT (CRSCOL-1)*8,((CRSLIN-1)*16)+13,CHR$(reinart%)
VOID BIOS(3,2,27) ! Print Chr$(27)+"C";
VOID BIOS(3,2,67) ! Cur eins nach rechts
VOID BIOS(3,2,27) ! Print Chr$(27)+"e";
VOID BIOS(3,2,101) ! Cursor einschalten
RETURN
'
PROCEDURE show_action(show_txt$) ! Informationsausgabe
IF LEN(show_txt$)>32
LET show_txt$=LEFT$(show_txt$,32)
ENDIF
DEFFILL 1,2,8
PBOX 382,0,640,14
DEFFILL 1,0,0
DEFTEXT 1,0,0,6
GRAPHMODE 3
TEXT 640-(LEN(show_txt$))*8,10,show_txt$
GRAPHMODE 1
DEFTEXT 1,0,0,13
RETURN
'
PROCEDURE show_top(term$,speed$,bits$,parity$,stop$)
GRAPHMODE 3
DEFTEXT 1,0,0,6
TEXT 86,10,term$ ! Terminal
TEXT 178,10,speed$ ! Speed
TEXT 210+4,10,bits$ ! Bits
TEXT 218+4,10,parity$ ! Parity
TEXT 226+4,10,stop$ ! Stopbit
DEFTEXT 1,0,0,13
GRAPHMODE 1
RETURN
'
PROCEDURE conf_rs(eins%,zwei%,drei%)
'
VOID XBIOS(15,eins%,zwei%,drei%,-1,-1,-1)
'
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
' Die RS232-Schnittstelle wird mittels der Xbios-Funktion Nr. 15 einge- |
' stellt (in C: Rsconf). Diese Funktion wiederum konfiguriert die RS232 |
' hardwaremaessig ueber den Special Chip MFP 68901. |
' |
' Der Funktion koennen bis zu sechs Parameter uebergeben werden, aber nur |
' die ersten drei sind notwendig. An die restlichen drei wird -1 uebergeben,|
' was "keine Veraenderung" bedeutet. |
' |
' Alle Parameter werden in integer-Werten uebergeben (%) |
' |
' Der erste Parameter gibt die Baud-Rate an: 1 = 9600 Baud |
' 2 = 4800 Baud |
' 4 = 2400 Baud |
' 7 = 1200 Baud |
' 8 = 600 Baud |
' 9 = 300 Baud |
' |
' Der zweite Parameter das Handshake: 0 = Kein Handshake (Normalzustand) |
' 1 = Xon/Xoff |
' 2 = RTS/CTS |
' |
' Der dritte Parameter stellt die Parity, die Anzahl Start- und Stopbits |
' und die Anzahl Datenbits ein. |
' Dieser Parameter ist der komplizierteste, denn er muss aus einer Integer |
' bestehen, die in binaerer Form einen 8-bit-Wert (1 Byte) ergibt, dessen |
' einzelne Bits alle drei Parameter-Teilwerte ergeben. |
' |
' Folgendes Schema zum Umrechnen von binaer/dezimal-Werten hat sich be- |
' waehrt: |
' |
' 128 64 32 16 8 4 2 1 |
' ----------------------------------------------------------------- |
' | bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 | |
' ----------------------------------------------------------------- |
' |
' Ueber jedem Bit der 8-bit-binaer-Zahl steht die Wertigkeit; fuer jedes |
' Bit, das 1 ist, wird die Wertigkeit zur Dezimal-Integer gezaehlt. Zum |
' Beispiel: |
' |
' Die Dezimal-Integer 8+128 (136) ergibt binaer 10001000 |
' |
' denn bit 7 ist 1 ("gesetzt") und ebenso bit 3, sie haben die Wertigkeit |
' 128 bzw. 8, also ist der Dezimalwert von 10001000 8+128=136. |
' |
' Folgende Bits des dritten Parameters in Xbios(15) ergeben folgende Ein- |
' stellungen: |
' |
' Bit 7: Immer gesetzt (1), also dezimal +128 |
' Bit 6 und Bit 5: 0 und 0 = 8 Datenbits |
' 0 und 1 = 7 Datenbits (dezimal +32) |
' 1 und 0 = 6 Datenbits (dezimal +64) |
' Bit 4 und Bit 3: 0 und 1 = 1 Stopbit (dezimal +8) |
' 1 und 1 = 2 Stopbits (dezimal +8+16) |
' Bit 2: 0 = No Parity |
' 1 = Parity so, wie in Bit 1 angegeben (dezimal +4) |
' Bit 1: 0 = Parity Odd |
' 1 = Parity Even (dezimal +2) |
' Bit 0: Immer 0 |
' |
' Ein paar Beispiele: |
' |
' Dezimal 8+32+128 ==> binaer 10101000 ==> 7N1 |
' Dezimal 2+4+8+32+128 ==> binaer 10101110 ==> 7E1 |
' Dezimal 2+4+8+128 ==> binaer 10001110 ==> 8E1 |
' |
' Um die RS232 auf 1200 Baud, kein Handshake und 8N1 einzustellen schreibt |
' man infolge dessen: |
' |
' Void Xbios(15,7,0,8+128,-1,-1,-1) |
' |
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
'
RETURN
'
PROCEDURE modem ! Modem-Abfrage
' Wenn "CONNEC" oder "connec" nach dem letzten Return:
IF (LPEEK(mod%)=1129270862 AND DPEEK(mod%+4)=17731) OR (LPEEK(mod%)=1668247150 AND DPEEK(mod%+4)=25955)
static!=FALSE
@show_action("On line")
IF capton!=TRUE
@show_capt(c_s%)
ELSE
@show_capt(0)
ENDIF
ENDIF
' Wenn "NO CAR" oder "no car" nach dem letzten Return:
IF (LPEEK(mod%)=1313808451 AND DPEEK(mod%+4)=16722) OR (LPEEK(mod%)=1852776547 AND DPEEK(mod%+4)=24946)
' +-----------------------------------------+
' |Alles wieder auf Standard zurueckstellen:|
' +-----------------------------------------+
static!=TRUE
@conf_rs(std_baud%,std_hands%,std_ucr%)
PAUSE 5
DEFFILL 1,2,8
PBOX 85,0,126,14
PBOX 174,0,239,14
PBOX 242,0,302,14
DEFFILL 1,0,0
@show_top(std_term$,std_speed$,std_bits$,std_parity$,std_stop$)
@get_log
@show_action("Off line - Static")
ENDIF
RETURN
'
PROCEDURE drucken
LOCAL len$,handle%,einhol%,anz%,is%,d_z%,show%,show$,fehler%
@fselbox("","Print",FALSE)
IF fs_frgt!
ELSE
HIDEM
@rsrc_gaddr(0,14,*adresse%,*ret) ! Zaehler-Schildchen
@draw_form
' LPRINT CHR$(27)+"R"+CHR$(2); ! Drucker auf Deutsch
LPRINT CHR$(27)+"R"+CHR$(0); ! Drucker auf Amerikanisch
OPEN "I",#77,treatfile$ ! Dateilaenge ermitteln
TEXT 34*8-1,10*16+10-3,"Dateilänge:" ! und anzeigen
len$=STR$(LOF(#77))
PRINT AT(41-LEN(len$),12);len$
CLOSE #77
PRINT AT(33,16);
OUT 5,2
'
CLR show%
handle%=GEMDOS(&H3D,L:VARPTR(treatfile$),0)
REPEAT
einhol%=GEMDOS(&H3F,handle%,L:512,L:puff%)
IF einhol%=512
anz%=512
ELSE
anz%=einhol%-1
ENDIF
ADD show%,anz%
show$=STR$(show%)
PRINT AT(41-LEN(show$),16);show$
FOR is%=puff% TO puff%+anz%
d_z%=PEEK(is%)
'
' Umlaute und Sonderzeichen in entsprechende Druckerzeichen wandeln:
'
' IF d_z=225 ! Doppel-S
' d_z%=126
' ENDIF
' IF d_z%=132 ! Umlaut a
' d_z%=123
' ENDIF
' IF d_z%=148 ! Umlaut o
' d_z%=124
' ENDIF
' IF d_z%=129 ! Umlaut u
' d_z%=125
' ENDIF
' IF d_z%=142 ! Umlaut A
' d_z%=91
' ENDIF
' IF d_z%=153 ! Umlaut O
' d_z%=92
' ENDIF
' IF d_z%=154 ! Umlaut U
' d_z%=93
' ENDIF
VOID GEMDOS(&H5,d_z%)
NEXT is%
UNTIL einhol%<>512
fehler%=GEMDOS(&H3E,handle%)
SHOWM
ENDIF
RETURN
'
PROCEDURE sichern
IF wp_down!=TRUE
@sav_wp
ELSE
@sav_asc
ENDIF
RETURN
'
PROCEDURE sav_wp
LOCAL cnt%,captfile$,len$,snd%,cnt_wp%,cnt_show%,swp_z%
cnt%=count_capt%-capt%
@fselbox("","Save 1stWord file",FALSE)
IF fs_frgt!
ELSE
@rsrc_gaddr(0,14,*adresse%,*ret)
@draw_form
TEXT 33*8-1,10*16+10-3,"Bytes in CPT:"
len$=STR$(cnt%)
PRINT AT(41-LEN(len$),12);len$
PRINT AT(34,16);"Wandle Datei..."
cnt_wp%=capt%
IF cnt%<1
PRINT AT(34,16);"CPT ist leer!"
FOR snd%=1 TO 3
SOUND 1,15,5,3
WAVE 1,1,11,444,30
NEXT snd%
SOUND 1,0,0,0,0
GOTO s_schluss
ENDIF
REPEAT
swp_z%=PEEK(cnt_wp%)
IF swp_z%=32
POKE cnt_wp%,30
ENDIF
INC cnt_wp%
UNTIL cnt_wp%=count_capt%
PRINT AT(34,16);"Speichere... "
BSAVE treatfile$,capt%,cnt%
count_capt%=capt%
c_s%=100
CLR c_ss%,cnt%
ENDIF
s_schluss:
RETURN
' +--------------------------------+
PROCEDURE sav_asc !Speichern mit dem Befehl BSAVE: !
LOCAL cnt%,captfile$ ! +--------------------------------+
cnt%=count_capt%-capt% !Cnt%=Laenge des benutzten Blocks
@fselbox("","Save",FALSE)
IF fs_frgt!
ELSE
HIDEM
@rsrc_gaddr(0,15,*adresse%,*ret)
@draw_form
BSAVE treatfile$,capt%,cnt% ! Anfang (Capt%) Anzahl (Cnt%) in einem Rutsch
count_capt%=capt% ! Alles zurueckstellen,
c_s%=100 ! Capture beginnt neu
CLR c_ss%
CLR cnt%
SHOWM
ENDIF
RETURN
'
PROCEDURE senden ! Senden
LOCAL ck_str%,handle%,einhol%,anz%,is%,s_z%,rein%,fehler%
@fselbox("","Send text (or ANSI)",TRUE)
IF fs_frgt!
GOTO vergisses ! und den Quatsch vergessen
ELSE
@fltr_fnam
@show_action("Send "+showfile$) ! ... und anzeigen
send_wp!=FALSE
ck_first!=TRUE
handle%=GEMDOS(&H3D,L:VARPTR(treatfile$),0) ! Datei z. Lesen oeffnen
REPEAT ! Von Disk jeweils
einhol%=GEMDOS(&H3F,handle%,L:512,L:puff%) ! Max. 512 Byte in Puffer
IF einhol%=512 ! Wenn 512 Byte
anz%=512 ! den ganzen Puffer senden
ELSE ! wenn weniger,
anz%=einhol%-1 ! nur die restliche Zahl
ENDIF
' ---------------------------------------------------------------------
IF ck_first!
ck_first!=FALSE
IF wp_up!
IF PEEK(puff%)<>31
BMOVE XBIOS(2)+8000,scrn%,19200
SHOWM
@rsrc_gaddr(0,22,*adresse%,*ret)
@draw_form
TEXT 27*8-6,12*16+4,"Dies ist keine FirstWord-Datei im"
TEXT 27*8-6,13*16+4,"WP-Modus. Ich kann sie nur senden"
TEXT 27*8-6,14*16+4,"wenn ich die Upload-Umwandlung"
TEXT 27*8-6,15*16+4,"rausnehme - darf ich?"
@mind_box
IF (DPEEK(adresse%+10+7*24) AND 1)=1
DPOKE (adresse%+10+7*24),0
wp_up!=FALSE
@show_elud(135+18,0)
BMOVE scrn%,XBIOS(2)+8000,19200
HIDEM
ELSE
DPOKE (adresse%+10+6*24),0
@show_action("Aborted")
@disagree
BMOVE scrn%,XBIOS(2)+8000,19200
HIDEM
GOTO vergisses
ENDIF
ENDIF
ENDIF
ENDIF
' ---------------------------------------------------------------------
FOR is%=puff% TO puff%+anz% ! Diese Anzahl Byte
s_z%=PEEK(is%) ! falls noetig (wenn
' ! WP-Modes ein)
IF wp_up!=TRUE ! durchsuchen und ggf.
IF s_z%=128
send_wp!=TRUE
s_z%=0
ENDIF
IF send_wp!=TRUE
IF s_z%=30 OR s_z%=28 ! abaendern
s_z%=32
ENDIF
IF s_z%=25
s_z%=45
ENDIF
ELSE
s_z%=0
ENDIF
ENDIF
'
IF GEMDOS(&H13)=-1 ! und falls RS232 bereit
VOID GEMDOS(&H4,s_z%) ! absenden
PAUSE 1 ! abbremsen
ENDIF
IF echo!=TRUE ! Wenn lokales Echo ein
@to_screen(CHR$(s_z%)) ! Zeichen auf Schirm
ELSE ! Wenn lokales Echo aus
IF GEMDOS(&H12)=-1 ! reinkomnende Zeichen
rein%=GEMDOS(&H3) ! (falls Gegenstelle echot)
@to_screen(CHR$(rein%)) ! auf Schirm
ENDIF
ENDIF
NEXT is%
UNTIL einhol%<>512 ! bis der Puffer leer ist
fehler%=GEMDOS(&H3E,handle%) ! Datei schliessen
'
@show_action("Done!")
FOR snd_end%=1 TO 3
@glocke
NEXT snd_end%
ENDIF
vergisses: ! Falls OK ohne Datei
von_tr!=TRUE ! Infor-Flag fuer Terminal
RETURN
'
PROCEDURE to_screen(output$) ! Zeichenausgabe auf Schirm
IF output$>=" "
IF CRSCOL<80
PRINT output$;
ELSE
LET output$=CHR$(13)
ENDIF
ENDIF
IF output$=CHR$(13)
IF CRSLIN=25
y_pos=CRSLIN
PRINT AT(1,2);
PRINT del_lines$;
PRINT AT(1,y_pos);
ELSE
PRINT CHR$(13)
ENDIF
ENDIF
RETURN
'
PROCEDURE swap_scrn
IF from_alt!
ELSE
VOID XBIOS(5,L:log_scrn%,L:phs_scrn%,-1)
IF clr!
CLS
ENDIF
clr!=FALSE
ENDIF
RETURN
'
PROCEDURE draw_form
@form_center(adresse%,*fxk%,*fyk%,*fw%,*fh%,*ret) ! Dialogbox zentrieren
@objc_draw(adresse%,0,3,fxk%,fyk%,fw%,fh%,*ret) ! Dialogbox zeichnen
RETURN
'
PROCEDURE show_scrn
IF from_alt!
ELSE
VOID XBIOS(5,L:phs_scrn%,L:phs_scrn%,-1)
IF gag!
@put_log_scrn
ELSE
BMOVE log_scrn%,XBIOS(2),32000
ENDIF
gag!=FALSE
ENDIF
RETURN
'
PROCEDURE scrn_save
BMOVE XBIOS(2),log_scrn%,32000
RETURN
'
PROCEDURE scrn_show
BMOVE log_scrn%,XBIOS(2),32000
RETURN
'
PROCEDURE mind_box
@form_do(adresse%,name,*ret)
RETURN
'
PROCEDURE objc_draw(ob_drtree,ob_drstartob,ob_drdepth,ob_drxclip,ob_dryclip,ob_drwclip,ob_drhclip,ob_drreturn)
'
DPOKE GINTIN,ob_drstartob ! AES-Parameter in die
DPOKE GINTIN+2,ob_drdepth ! entsprechenden
DPOKE GINTIN+4,ob_drxclip ! Arrays übertragen
DPOKE GINTIN+6,ob_dryclip
DPOKE GINTIN+8,ob_drwclip
DPOKE GINTIN+10,ob_drhclip
LPOKE ADDRIN,ob_drtree
GEMSYS 42 ! Befehl ausführen
*ob_drreturn=DPEEK(INTOUT)
RETURN
'
PROCEDURE rsrc_load(name$,re_lreturn)
'
LET name$=UPPER$(name$)+CHR$(0) ! Namen aufbereiten
LPOKE ADDRIN,VARPTR(name$) ! Adresse des Namens übergeben
GEMSYS 110 ! Resource_Load aufrufen
*re_lreturn=DPEEK(GINTOUT)
RETURN
'
PROCEDURE rsrc_gaddr(re_gtype,re_gindex,re_gaddr,re_greturn)
'
DPOKE GINTIN,re_gtype
DPOKE GINTIN+2,re_gindex
GEMSYS 112
'
*re_greturn=DPEEK(INTOUT)
*re_gaddr=LPEEK(ADDROUT)
RETURN
'
PROCEDURE form_do(fo_dotree,fo_dostartob,fo_doreturn)
'
DPOKE GINTIN,fo_dostartob
LPOKE ADDRIN,fo_dotree
GEMSYS 50
'
*fo_doreturn=DPEEK(GINTOUT)
RETURN
'
PROCEDURE form_center(fo_ctree,fo_cx,fo_cy,fo_cw,fo_ch,fo_cresvd)
'
LPOKE ADDRIN,fo_ctree
GEMSYS 54
'
*fo_cresvd=DPEEK(GINTOUT)
*fo_cx=DPEEK(GINTOUT+2)
*fo_cy=DPEEK(GINTOUT+4)
*fo_cw=DPEEK(GINTOUT+6)
*fo_ch=DPEEK(GINTOUT+8)
RETURN
'
' -------------------- Xmodem
'
PROCEDURE xmodem_send(xs_name$)
LOCAL oldx%,oldy%,ck_str%,xm_bad%,xm_ok%
PRINT CHR$(27);"j";
VOID XBIOS(21,0) ! Cursor aus
@scrn_save
@xm_box
VOID XBIOS(15,-1,0,-1,-1,-1,-1) ! Eventuelles Handshake aus
block_numb%=1
'
xsend_top:
OPEN "I",#1,xs_name$
file_byte=LOF(#1)
file_block=INT(file_byte/128)
PRINT AT(5,10);UPPER$(showfile$);char$;" ist ";file_byte;" Byte lang.";" (";file_block;" Xmodem-Blöcke)."
'
xsend_1:
abort$=INKEY$
IF abort$=CHR$(24) THEN
GOTO xsend_can
ENDIF
IF BIOS(1,1) THEN
da%=BIOS(2,1)
GOTO xsend_3
ELSE
GOTO xsend_2
ENDIF
'
xsend_2:
INC time_out
PRINT AT(5,12);"Time out: ";time_out
IF (time_out/500)=(500*60) THEN
GOTO xsend_can ! XMODEM CANCEL
ELSE
GOTO xsend_1
ENDIF
'
xsend_3:
IF da%=nak THEN
GOTO xsend_5
ENDIF
IF da%=can THEN
GOTO xsend_can
ENDIF
GOTO xsend_2
'
xsend_4:
DO
test!=BIOS(1,1)
EXIT IF test!=0
VOID INP(1)
LOOP
iorec=XBIOS(14,0)
iorec_buffer$=STRING$(1024,0)
DPOKE iorec+4,1024
LPOKE iorec,VARPTR(iorec_buffer$)
DPOKE iorec+6,0
DPOKE iorec+8,0
PRINT AT(5,8);"Block-Nummer: ";block_numb%;
OUT 1,soh
OUT 1,block_numb%
block_comp%=0
block_comp%=(255-block_numb%)
OUT 1,block_comp%
PRINT " Block Compliment: ";block_comp%
FOR byte%=1 TO 128
PRINT AT(5,12);"Sende Byte Nr.: ";byte%
OUT 1,ASC(MID$(block$,byte%,1))
NEXT byte%
OUT 1,checksum%
GOTO xsend_6
'
xsend_5:
block$=""
block_dat%=0
check%=0
file_left=0
make_block:
file_left=file_byte-(128*(block_numb%-1))
IF file_left<0 THEN
finish!=TRUE
OUT 1,eot
GOTO xsend_6
ENDIF
PRINT AT(5,4);"Übrige Bytes: ";file_left;" "
IF file_left=>128 THEN
FOR byte%=1 TO 128
block_dat%=INP(#1)
check%=check%+block_dat%
block$=block$+CHR$(block_dat%)
NEXT byte%
ELSE
FOR byte%=1 TO file_left
block_dat%=INP(#1) ! EOF-Fehler passiert hier
check%=check%+block_dat%
block$=block$+CHR$(block_dat%)
NEXT byte%
pad=128-file_left
block$=block$+STRING$(pad,0)
ENDIF
checksum%=0
checksum%=check% AND 255
PRINT AT(5,5);"LOC: ";LOC(#1)
GOTO xsend_4
'
xsend_6:
abort$=INKEY$
IF abort$=CHR$(24) THEN
GOTO xsend_can
ENDIF
IF BIOS(1,1) THEN
da%=BIOS(2,1)
ENDIF
IF da%=ack AND finish!<>-1 THEN
PRINT AT(5,14);"Our Checksum: ";checksum%;" "
INC block_numb%
GOTO xsend_5
ENDIF
IF da%=ack AND finish!=-1 THEN
GOTO xsend_complete
ENDIF
IF da%=nak THEN
GOTO xsend_4
ENDIF
'
xsend_can:
OUT 1,can
OUT 1,can
CLOSE #1
PRINT AT(12,19);"Status: ";"XMODEM ABORTED. ";char$;
PRINT UPPER$(show_name$);char$;" not sent."
PRINT AT(26,22);"PRESS ANY KEY TO CONTINUE"
@show_action("Abort")
FOR xm_bad%=1 TO 3 ! Abbruch-Ton
SOUND 1,15,5,4,15
SOUND 1,0,0,0,0
PAUSE 1
NEXT xm_bad%
SOUND 1,15,5,4,30
SOUND 1,0,0,0,0
VOID INP(2)
GOTO xsend_end
'
xsend_complete:
CLOSE #1
PRINT AT(5,4);"Übrige Bytes: 0 "
PRINT AT(5,5);"LOC: ";red$;"FILE-END";char$
PRINT AT(12,19);"Status: ";"XMODEM DONE. ";char$;
PRINT UPPER$(show_name$);
PRINT char$;" completed."
PRINT AT(26,22);"PRESS ANY KEY TO CONTINUE"
@show_action("Fertig!")
FOR xm_ok%=1 TO 3 ! OK-Ton
@glocke
NEXT xm_ok%
VOID INP(2)
GOTO xsend_end
'
xsend_end:
' Void Xbios(15,-1,1,-1,-1,-1,-1) !Parameter *******************
@scrn_show
PRINT CHR$(27);"k";
VOID XBIOS(21,1)
RETURN
'
PROCEDURE xmodem_receive(xr_name$)
LOCAL dummy$,dummy1$,oldx%,oldy%,ck_str%,xm_bad%,xm_ok%
PRINT CHR$(27);"j";
VOID XBIOS(21,0) ! Cursor aus
@scrn_save
@xm_box
xmodem_top:
'
xmodem_part1:
OPEN "O",#1,xr_name$
VOID XBIOS(15,-1,0,-1,-1,-1,-1) ! Turns XON/XOFF off...a <M><U><S><T>
block%=1
try%=1
'
xmodem_part2:
@clear_modem
VOID BIOS(3,1,nak)
time_out=0
'
xmodem_part3:
PRINT AT(10,7);rv1$;"Block: ";block%;" Versuch: ";try%;" "
'
xmodem_part4:
PRINT AT(10,9);"Zeitlimit: ";time_out;" "
'
xmodem_part5:
abort$=INKEY$
IF abort$=CHR$(24) THEN
GOTO xmodem_part11
ENDIF
IF BIOS(1,1) THEN
GOTO xmodem_part7
ELSE
GOTO xmodem_part6
ENDIF
'
xmodem_part6:
INC time_out
IF (time_out/500)=(500*10) THEN
GOTO xmodem_part11
ENDIF
IF (time_out/500)=INT(time_out/500) THEN
GOTO xmodem_part2
ELSE
GOTO xmodem_part4
ENDIF
'
xmodem_part7:
da%=BIOS(2,1)
IF da%=soh THEN
GOTO xmodem_part8
ENDIF
IF da%=eot THEN
GOTO xmodem_part12
ENDIF
IF da%=can THEN
GOTO xmodem_part11
ENDIF
GOTO xmodem_part6
'
xmodem_part8:
block_numb%=0
block_comp%=0
block_numb%=BIOS(2,1)
block_comp%=BIOS(2,1)
PRINT AT(10,11);"Block: ";block_numb%;" ";"COMP: ";block_comp%;" "
PRINT AT(24,13);SPACE$(20)
check%=0
block$=""
checksum%=0
PRINT AT(10,13);"Byte received: ";" "
FOR byte%=1 TO 128
PRINT AT(25,13);byte%;" "
da%=0
byte_data:
abort$=INKEY$
EXIT IF abort$=CHR$(24)
IF BIOS(1,1) THEN
da%=BIOS(2,1)
check%=check%+da%
block$=block$+CHR$(da%)
ELSE
GOTO byte_data
ENDIF
NEXT byte%
PRINT AT(25,13);(byte%-1);" Block complete!"
IF abort$=CHR$(24) THEN
GOTO xmodem_part11
ELSE
checksum%=check% AND 255
ENDIF
check:
abort$=INKEY$
IF abort$=CHR$(24) THEN
GOTO xmodem_part11
ENDIF
check_sum%=0
PRINT AT(10,15);SPACE$(50)
PRINT AT(10,15);"Awaiting checksum..."
IF BIOS(1,1) THEN
check_sum%=BIOS(2,1)
GOTO check_got
ELSE
GOTO check
ENDIF
check_got:
PRINT AT(10,15);SPACE$(50)
PRINT AT(10,15);"Checksum: ";checksum%;" Check: ";check_sum%
IF checksum%=check_sum% THEN
GOTO xmodem_part9
ELSE
GOTO xmodem_part10
ENDIF
'
xmodem_part9:
PRINT #1,block$;
try%=1
INC block%
time_out=0
b_out=0
@clear_modem
OUT 1,ack
GOTO xmodem_part3
'
xmodem_part10:
INC try%
IF try%>10 THEN
GOTO xmodem_part11
ELSE
@clear_modem
ENDIF
GOTO xmodem_part2
'
xmodem_part11:
OUT 1,can
OUT 1,can
OUT 1,can
CLOSE #1
KILL xr_name$
PRINT AT(10,17);"Status: XMODEM AORT. ";
PRINT UPPER$(showfile$);" deleted."
PRINT AT(26,20);"-->PRESS ANY KEY<--"
@show_action("Abort")
FOR xm_bad%=1 TO 3 ! Abbruch-Ton
SOUND 1,15,5,4,15
SOUND 1,0,0,0,0
NEXT xm_bad%
SOUND 1,15,5,4,30
SOUND 1,0,0,0,0
VOID INP(2)
GOTO xmodem_end
'
xmodem_part12:
OUT 1,ack
CLOSE #1
PRINT AT(10,17);"Status: XMODEM DONE. ";
PRINT UPPER$(showfile$);
PRINT char$;" done."
PRINT AT(26,20);"-->PRESS ANY KEY<--"
@show_action("Fertig")
FOR xm_ok%=1 TO 3 ! OK-Ton
@glocke
NEXT xm_ok%
VOID INP(2)
GOTO xmodem_end
'
xmodem_end:
' Void Xbios(15,-1,1,-1,-1,-1,-1) ! Parameter *******************
@scrn_show
PRINT CHR$(27);"k";
VOID XBIOS(21,1) ! Cursor ein
RETURN
'
PROCEDURE clear_modem
DO
test!=BIOS(1,1)
EXIT IF test!=0
VOID INP(1)
LOOP
' @Clear_iorec_buffer(1024)
RETURN
'
PROCEDURE xm_box
DEFFILL 1,0
PBOX 10,25,630,390 ! Rahmen
BOX 13,28,627,387
BOX 14,29,626,386
BOX 15,30,625,385
DEFTEXT 1,0,0,6
TEXT 227,390," Abbruch mit Control-X "
DEFTEXT 1,0,0,13
RETURN
'
PROCEDURE fehler ! Sollte nur bei Xmodem ansprechen
LOCAL fehler
fehler=ERR
IF fehler=26 THEN ! EOF-Fehler
RESUME NEXT ! Nicht beachten
ELSE
RESUME abfang
ENDIF
abfang:
RETURN
'
PROCEDURE glocke
SOUND 1,15,10,4
WAVE 1,1,9,10000,30
RETURN
'
PROCEDURE get_log
IF logon!=TRUE
@toggle_log(1)
ELSE
@toggle_log(0)
ENDIF
RETURN
'
PROCEDURE toggle_log(tl_arg%)
DEFFILL 1,2,8
PBOX 242,0,302,14
DEFFILL 1,0,0
DEFTEXT 1,0,0,6
GRAPHMODE 3
IF tl_arg%=1
TEXT 244,10,"LOG ON"
logon!=TRUE
ELSE
TEXT 244,10,"LOG OFF"
logon!=FALSE
ENDIF
GRAPHMODE 1
DEFTEXT 1,0,0,13
RETURN
'
PROCEDURE show_capt(capt_state%)
PUT 342,0,cvr_box$ ! Abdecken
GRAPHMODE 3
DEFTEXT 1,0,0,6
IF capt_state%>0
TEXT 343,10," %"
IF capt_state%=100
TEXT 342,10,capt_state%
ELSE
TEXT 350,10,capt_state%
ENDIF
ELSE
IF capt_state%=0
TEXT 342,10,"OFF"
ENDIF
IF capt_state%=-1
TEXT 342,10,"STBY"
ENDIF
ENDIF
DEFTEXT 1,0,0,13
GRAPHMODE 1
RETURN
'
PROCEDURE get_elud
IF echo!=TRUE
@show_elud(135,1)
ELSE
@show_elud(135,0)
ENDIF
IF lf!=TRUE
@show_elud(135+9,1)
ELSE
@show_elud(135+9,0)
ENDIF
IF wp_up!=TRUE
@show_elud(135+18,1)
ELSE
@show_elud(135+18,0)
ENDIF
IF wp_down!=TRUE
@show_elud(135+27,2)
ELSE
@show_elud(135+27,0)
ENDIF
RETURN
'
PROCEDURE show_elud(left_pos%,onoff%)
IF onoff%>0
GRAPHMODE 3
DEFTEXT 1,0,0,4
IF onoff%=1
TEXT left_pos%,12,CHR$(8)
ENDIF
IF onoff%=2
TEXT left_pos%,12,CHR$(247)
ENDIF
GRAPHMODE 1
DEFTEXT 1,0,0,13
ELSE
PUT left_pos%,8,eludbox$
ENDIF
RETURN
'
PROCEDURE fselbox(d_flt$,bxontxt$,sh_actn!)
fs_frgt!=FALSE
anew:
@fsel_boxon(bxontxt$)
FILESELECT pfad$,d_flt$,treatfile$
IF RIGHT$(treatfile$)="\"
IF sh_actn!
@show_action("Select file!")
ENDIF
@fsel_boxoff
@disagree
GOTO anew
ENDIF
IF treatfile$=""
IF sh_actn!
@show_action("No file!")
ENDIF
@fsel_boxoff
@disagree
fs_frgt!=TRUE
ENDIF
@fsel_boxoff
RETURN
'
PROCEDURE fltr_fnam
LOCAL ck_str%
ck_str%=LEN(treatfile$)
WHILE MID$(treatfile$,ck_str%,1)<>"\"
DEC ck_str%
WEND
showfile$=RIGHT$(treatfile$,LEN(treatfile$)-ck_str%)
' Print Showfile$
RETURN
'
PROCEDURE fsel_boxon(fsbtxt$) ! Erlaeuterungs-Box über Fileselect
LOCAL fstb%
DEFTEXT 1,0,0,13
GET 199,29,441,51,fsboxhg$ ! Hintergrund retten
DEFFILL 1,2,2
PBOX 199,29,441,51
BOX 200,30,440,50
IF LEN(fsbtxt$)>28 ! Textlaenge trimmen
LET fsbtxt$=LEFT$(fsbtxt$,28)
ENDIF
fstb%=(29-LEN(fsbtxt$))*4+203 ! Text
TEXT fstb%,45,fsbtxt$ ! einmitten
DEFFILL 1,0
RETURN
'
PROCEDURE fsel_boxoff ! Erlaeuterungs-Box loeschen
PUT 199,29,fsboxhg$
CLR fsboxhg$
RETURN
'
' Ende des Listings------------------------------------------------------------